rm(list=ls(all=TRUE))
load("~/Post-doc/Data/Total Merged Data File (July 24 2023).RData")
str(CC.TotalData)

Data for mean velocity, angular velocity, turn and heading angles each will be analyzed by a mixed model ANCOVA with chemical concentration, and light as fixed (treatment) effects, flow velocity as the co-variate and replicate as a random (blocking affect) with individual paths as the unit of analysis.


##To run ANCOVA in R load the following packages:
library(car)
library(compute.es)
library(effects)
library(ggplot2)
library(multcomp)
library(pastecs)
library(WRS2)

##If you are using lm or aov make sure that you set the contrasts using the "contrasts" function before doing either aov or lm. R uses non-orthogonal contrasts by default which can mess everything up in an ANCOVA. If you want to set orthogonal contrasts use:

contrasts(dataname$factorvariable)=contr.poly()# of levels, i.e. 3) ##example
contrasts(CC.TotalData$Chlorophyll)=contr.poly(7)
##then run your model as

model.1=aov(dv~covariate+factorvariable, data=dataname) ## example
mod1=aov(vel.flow~Flow.rate+Chlorophyll, data=CC.TotalData)
##To view the model use:

Anova(model.1, type="III") ## example
Anova(mod1, type="III")
##Make sure you use capital "A" Anova here and not anova. This will give results using type III SS.

summary.lm(model.1) ##will give another summary and includes the R-sq. output. Example
summary.lm(mod1)

posth=glht(model.1, linfct=mcp(factorvariable="Tukey"))  ##gives the post-hoc Tukey analysis. Example
posth=glht(mod1, linfct=mcp(Chlorophyll="Tukey"))
summary(posth) ##shows the output in a nice format.

##If you want to test for homogeneity of regression slopes you can also include an interaction term for the IV and covariate. That would be:

model=aov(dv~covariate+IV+covariate:IV, data=dataname) ## example

mod2=aov(vel.flow~Flow.rate+Chlorophyll+Flow.rate:Chlorophyll, data=CC.TotalData) ## not right?
##If the interaction term is significant then you do not have homogeneity.

Stats on each level

##Looking at other stats we could run
library(nlme)
library(lme4)
library(effects)


## example
d <- data.frame(
    Y = rnorm(48),  ### e.g. velocity
    subject = factor(rep(1:12, 4)),  ### e.g. D_V_T
    A = factor(rep(1:2, each=24)),   #### e.g. Light
    B = factor(rep(rep(1:2, each=12), 2)))   ### e.g. Flow.rate

summary(aov(Y ~ A*B + Error(subject/(A*B)), data=d))  # Standard repeated measures ANOVA

mode1 <- lme(Y~A*B, random = ~1|subject, data=d)  ## nlme

lmer(Y ~ A*B + (1|subject) + (1|A:subject) + (1|B:subject), data=d)  ### lme4



#########    our data using nlme package     #########

mode1 <- lme(pitch.perfect~Chlorophyll*Light, random= ~1|D_V_T, data=CC.TotalData)

mode2 <- lme(pitch.perfect~Light, random= ~1|D_V_T, data=CC.TotalData)

anova(mode1, mode2) #if it shows only minor improvement, no need to include missing factor

anova(mode2)


#########    our data using l4me package     #########

model1 <- lmer(vel.flow ~ Flow.rate*Chlorophyll + (1|D_V_T) + (1|Flow.rate:D_V_T) + (1|Chlorophyll:D_V_T), data=CC.TotalData)  ###

model2 <- lmer(vel.flow ~ Flow.rate + (1|D_V_T) + (1|Flow.rate:D_V_T), data=CC.TotalData)

anova(model1, model2) #if it shows only minor improvement, no need to include missing factor

anova(model1)

######### plotting effect of the models    ##########
plot(effect("turn.angle*Flow.rate",se=TRUE, confidence.level=.95, mode2))


###### interaction plot with Lattice extra #########
library(latticeExtra)
xyplot(CC.TotalData$vel.flow~CC.TotalData$turn.angle|CC.TotalData$Light*CC.TotalData$Flow.rate,  main="Scatterplots by Light and Flow Rate", 
   ylab="Vel.flow", xlab="Turn Angle") +
   layer(panel.ablineq(lm(y ~ x), r.sq = TRUE,
   at = 0.75, adj=1:5), style = 4)


############## interaction plots ###########################

interaction.plot(CC.TotalData$vel.flow, ## x axis
                 CC.TotalData$Flow.rate, ## factor for lines
                 CC.TotalData$turn.angle,  ## y axis
                 fun = mean,
                 type = c("b"), legend = TRUE,
                 trace.label = "Flow Rate",
                 ylim = c(-1,180),
                 main = "Lights On",
                 xlab = "vel.flow",
                 ylab = "turn angle",
                 col = CC.TotalData$Flow.rate, pch = c(1:9),
                 axes = TRUE)
#library(tidyr)
#library(dplyr)
#CC.TotalData %>% mutate_all(~replace(., is.nan(.), 0))
CC.TotalData[is.nan(CC.TotalData)] <- 0
range(CC.TotalData$log.vel.flow)
##########################################################

rm(mode1)

rm(mode2)


mod1 <- lm(vel.flow~Flow.rate*Chlorophyll, data = CC.TotalData)
summary(mode2)

             Kernel Density Plots

Turn Angles first…

################################ Chlorophyll ########################
levels(CC.TotalData$Chlorophyll)
[1] "No Chlorophyll"     "Low Chlorophyll"    "Medium Chlorophyll"
[4] "High Chlorophyll"  

Now looking at velocity in relation to flow instead….

### Kernel density plots ################### Swimming velocity
##range(CC.TotalData$vel.flow)
## plot(log.vel.flow)
##log.vel.flow <- log10(CC.TotalData$vel.flow[CC.TotalData$vel.flow > 0])
#str(CC.TotalData)
#  vels <- (CC.TotalData$v[CC.TotalData$D_V_T==ind[i]])  ## vels <- log10(vels[vels>0])  ## from notebook01, could be useful to try this instead
################################ Flow Rate ########################
levels(CC.TotalData$Flow.rate)
[1] "0"   "0.6" "3"   "5.9" "8.9"

Now for headings…..

rm(kd1, kd2, kd3, kd4, kd5, kd6, kd7, kd8)
Warning in rm(kd1, kd2, kd3, kd4, kd5, kd6, kd7, kd8) :
  object 'kd6' not found
Warning in rm(kd1, kd2, kd3, kd4, kd5, kd6, kd7, kd8) :
  object 'kd7' not found
Warning in rm(kd1, kd2, kd3, kd4, kd5, kd6, kd7, kd8) :
  object 'kd8' not found

Now for pitch….

For each level of Flow

f0 <- CC.TotalData[CC.TotalData$Flow.rate=="0"]
Error in `[.data.frame`(CC.TotalData, CC.TotalData$Flow.rate == "0") : 
  undefined columns selected

For each level of Chlorophyll


### Kernel density plots ################### Turn Angles
par(mar= c(4,4,2,1))
par(mfrow=c(3,3))

################################ Flow Rate ########################
levels(CC.TotalData$Flow.rate)

kd1 <- density(ChlA0$turn.angle[ChlA0$Flow.rate=="0"])
plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 0")

kd2 <- density(ChlA0$turn.angle[ChlA0$Flow.rate=="0.6"])
lines(kd2, col='light blue', lwd=2)

kd3 <- density(ChlA0$turn.angle[ChlA0$Flow.rate=="3"])
lines(kd3, col='yellow', lwd=2)

kd4 <- density(ChlA0$turn.angle[ChlA0$Flow.rate=="5.9"])
lines(kd4, col='orange', lwd=2)

kd5 <- density(ChlA0$turn.angle[ChlA0$Flow.rate=="8.9"])
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)




##kd1 <- density(ChlA4.3$turn.angle[ChlA4.3$Flow.rate=="0"])
##plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 4.3")

kd2 <- density(ChlA4.3$turn.angle[ChlA4.3$Flow.rate=="0.6"])
plot(kd2, xlim = c(5,175), ylim = c(0, 0.02), col='light blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 4.3")
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA4.3$turn.angle[ChlA4.3$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA4.3$turn.angle[ChlA4.3$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA4.3$turn.angle[ChlA4.3$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(ChlA4.6$turn.angle[ChlA4.6$Flow.rate=="0"])
plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 4.6")

kd2 <- density(ChlA4.6$turn.angle[ChlA4.6$Flow.rate=="0.6"])
##plot(kd2, xlim = c(5,175), ylim = c(0, 0.02), col='light blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 4.6")
lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA4.6$turn.angle[ChlA4.6$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA4.6$turn.angle[ChlA4.6$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA4.6$turn.angle[ChlA4.6$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(ChlA5.5$turn.angle[ChlA5.5$Flow.rate=="0"])
plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 5.5")

##kd2 <- density(ChlA5.5$turn.angle[ChlA5.5$Flow.rate=="0.6"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA5.5$turn.angle[ChlA5.5$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA5.5$turn.angle[ChlA5.5$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA5.5$turn.angle[ChlA5.5$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



##kd1 <- density(ChlA6$turn.angle[ChlA6$Flow.rate=="0"])
##plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 6")

kd2 <- density(ChlA6$turn.angle[ChlA6$Flow.rate=="0.6"])
plot(kd2, xlim = c(5,175), ylim = c(0, 0.02), col='light blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 6")
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA6$turn.angle[ChlA6$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA6$turn.angle[ChlA6$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA6$turn.angle[ChlA6$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(ChlA7$turn.angle[ChlA7$Flow.rate=="0"])
plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 7")

##kd2 <- density(ChlA7$turn.angle[ChlA7$Flow.rate=="0.6"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA7$turn.angle[ChlA7$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA7$turn.angle[ChlA7$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA7$turn.angle[ChlA7$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



##kd1 <- density(ChlA13$turn.angle[ChlA13$Flow.rate=="0"])
##plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 13")

kd2 <- density(ChlA13$turn.angle[ChlA13$Flow.rate=="0.6"])
plot(kd2, xlim = c(5,175), ylim = c(0, 0.02), col='light blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 13")
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA13$turn.angle[ChlA13$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA13$turn.angle[ChlA13$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA13$turn.angle[ChlA13$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(ChlA19$turn.angle[ChlA19$Flow.rate=="0"])
plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Turn Angle Vs Flow Rate, Chlorophyll = 19")

##kd2 <- density(ChlA19$turn.angle[ChlA19$Flow.rate=="0.6"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA19$turn.angle[ChlA19$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA19$turn.angle[ChlA19$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA19$turn.angle[ChlA19$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)


###########################################################################

#############################  Light  ######################################

###########################################################################

par(mar= c(4,4,2,1))
par(mfrow=c(3,3))

kd1 <- density(ChlA0$turn.angle[ChlA0$Light=="Present"])
plot(kd1,xlim = c(5,175), ylim = c(0, 0.025), col='blue', lwd=2, main = "Turn Angles Vs Light, Chlorophyll = 0")

kd2 <- density(ChlA0$turn.angle[ChlA0$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA4.3$turn.angle[ChlA4.3$Light=="Present"])
plot(kd1,xlim = c(5,175), ylim = c(0, 0.025), col='blue', lwd=2, main = "Turn Angles Vs Light, Chlorophyll = 4.3")

##kd2 <- density(ChlA4.3$turn.angle[ChlA4.3$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA4.6$turn.angle[ChlA4.6$Light=="Present"])
plot(kd1,xlim = c(5,175), ylim = c(0, 0.025), col='blue', lwd=2, main = "Turn Angles Vs Light, Chlorophyll = 4.6")

##kd2 <- density(ChlA4.6$turn.angle[ChlA4.6$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA5.5$turn.angle[ChlA5.5$Light=="Present"])
plot(kd1,xlim = c(5,175), ylim = c(0, 0.025), col='blue', lwd=2, main = "Turn Angles Vs Light, Chlorophyll = 5.5")

##kd2 <- density(ChlA5.5$turn.angle[ChlA5.5$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(ChlA6$turn.angle[ChlA6$Light=="Present"])
plot(kd1,xlim = c(5,175), ylim = c(0, 0.025), col='blue', lwd=2, main = "Turn Angles Vs Light, Chlorophyll = 6")

##kd2 <- density(ChlA6$turn.angle[ChlA6$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA7$turn.angle[ChlA7$Light=="Present"])
plot(kd1,xlim = c(5,175), ylim = c(0, 0.025), col='blue', lwd=2, main = "Turn Angles Vs Light, Chlorophyll = 7")

kd2 <- density(ChlA7$turn.angle[ChlA7$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(ChlA13$turn.angle[ChlA13$Light=="Present"])
plot(kd1,xlim = c(5,175), ylim = c(0, 0.025), col='blue', lwd=2, main = "Turn Angles Vs Light, Chlorophyll = 13")

##kd2 <- density(ChlA13$turn.angle[ChlA13$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA19$turn.angle[ChlA19$Light=="Present"])
plot(kd1,xlim = c(5,175), ylim = c(0, 0.025), col='blue', lwd=2, main = "Turn Angles Vs Light, Chlorophyll = 19")

kd2 <- density(ChlA19$turn.angle[ChlA19$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)

For each level of Flow (now for velocity)

### Kernel density plots ################### Velocity
par(mar= c(4,4,2,1))
par(mfrow=c(1,2))

################################ Chlorophyll ########################

kd1 <- density(f0$vel.flow[f0$Chlorophyll=="0"])
plot(kd1, xlim = c(-2,2), ylim = c(0, 15), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Chlorophyll, Flow = 0")

kd2 <- density(f0$vel.flow[f0$Chlorophyll=="4.3"])
lines(kd2, col='light blue', lwd=2)

kd3 <- density(f0$vel.flow[f0$Chlorophyll=="4.6"])
lines(kd3, col='yellow', lwd=2)

kd8 <- density(f0$vel.flow[f0$Chlorophyll=="5.5"])
lines(kd8, col='orange', lwd=2)

kd4 <- density(f0$vel.flow[f0$Chlorophyll=="6.1"])
lines(kd4, col='red', lwd=2)

kd5 <- density(f0$vel.flow[f0$Chlorophyll=="7.6"])
lines(kd5, col='dark red', lwd=2)

kd6 <- density(f0$vel.flow[f0$Chlorophyll=="13.5"])
lines(kd6, col='purple', lwd=2)

kd7 <- density(f0$vel.flow[f0$Chlorophyll=="19"])
lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chloropphyll 5.5", "Chlorophyll 6.1", 
                  "Chlorophyll 7.6", "Chlorophyll 13.5", 'Chlorophyll 19'),
       col = c("blue", "light blue", "yellow", "orange", "red", "dark red", "purple", "black"),
       lty = 1)




kd1 <- density(f.6$vel.flow[f.6$Chlorophyll=="0"])
plot(kd1, xlim = c(-2,2), ylim = c(0, 15), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Chlorophyll, Flow = 0.6")

kd2 <- density(f.6$vel.flow[f.6$Chlorophyll=="4.3"])
lines(kd2, col='light blue', lwd=2)

kd3 <- density(f.6$vel.flow[f.6$Chlorophyll=="4.6"])
lines(kd3, col='yellow', lwd=2)

##kd8 <- density(f.6$vel.flow[f.6$Chlorophyll=="5.5"])
##lines(kd8, col='orange', lwd=2)

kd4 <- density(f.6$vel.flow[f.6$Chlorophyll=="6.1"])
lines(kd4, col='red', lwd=2)

##kd5 <- density(f.6$vel.flow[f.6$Chlorophyll=="7.6"])
##lines(kd5, col='dark red', lwd=2)

kd6 <- density(f.6$vel.flow[f.6$Chlorophyll=="13.5"])
lines(kd6, col='purple', lwd=2)

##kd7 <- density(f.6$vel.flow[f.6$Chlorophyll=="19"])
##lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chlorophyll 5.5", "Chlorophyll 6.1", 
                  "Chlorophyll 7.6", "Chlorophyll 13.5", 'Chlorophyll 19'),
       col = c("blue", "light blue", "yellow", "orange", "red", "dark red", "purple", "black"),
       lty = 1)



kd1 <- density(f3$vel.flow[f3$Chlorophyll=="0"])
plot(kd1, xlim = c(-15,15), ylim = c(0, 2.5), col='blue', lwd=2, main = "Velocity (bot logged, in relation to flow) Vs Chlorophyll, Flow = 3")

##kd2 <- density(f3$vel.flow[f3$Chlorophyll=="4.3"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(f3$vel.flow[f3$Chlorophyll=="4.6"])
##lines(kd3, col='yellow', lwd=2)

##kd8 <- density(f3$vel.flow[f3$Chlorophyll=="5.5"])
##lines(kd8, col='orange', lwd=2)

##kd4 <- density(f3$vel.flow[f3$Chlorophyll=="6.1"])
##lines(kd4, col='red', lwd=2)

##kd5 <- density(f3$vel.flow[f3$Chlorophyll=="7.6"])
##lines(kd5, col='dark red', lwd=2)

##kd6 <- density(f3$vel.flow[f3$Chlorophyll=="13.5"])
##lines(kd6, col='purple', lwd=2)

##kd7 <- density(f3$vel.flow[f3$Chlorophyll=="19"])
##lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chlorophyll 5.5", "Chlorophyll 6.1", 
                  "Chlorophyll 7.6", "Chlorophyll 13.5", 'Chlorophyll 19'),
       col = c("blue", "light blue", "yellow", "orange", "red", "dark red", "purple", "black"),
       lty = 1)



kd1 <- density(f5$vel.flow[f5$Chlorophyll=="0"])
plot(kd1, xlim = c(-15,15), ylim = c(0, 2.5), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Chlorophyll, Flow = 5.9")

##kd2 <- density(f5$vel.flow[f5$Chlorophyll=="4.3"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(f5$vel.flow[f5$Chlorophyll=="4.6"])
##lines(kd3, col='yellow', lwd=2)

##kd8 <- density(f5$vel.flow[f5$Chlorophyll=="5.5"])
##lines(kd8, col='orange', lwd=2)

##kd4 <- density(f5$vel.flow[f5$Chlorophyll=="6.1"])
##lines(kd4, col='red', lwd=2)

##kd5 <- density(f5$vel.flow[f5$Chlorophyll=="7.6"])
##lines(kd5, col='dark red', lwd=2)

##kd6 <- density(f5$vel.flow[f5$Chlorophyll=="13.5"])
##lines(kd6, col='purple', lwd=2)

##kd7 <- density(f5$vel.flow[f5$Chlorophyll=="19"])
##lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chlorophyll 5.5", "Chlorophyll 6.1", 
                  "Chlorophyll 7.6", "Chlorophyll 13.5", 'Chlorophyll 19'),
       col = c("blue", "light blue", "yellow", "orange", "red", "dark red", "purple", "black"),
       lty = 1)



kd1 <- density(f8$vel.flow[f8$Chlorophyll=="0"])
plot(kd1, xlim = c(-15,15), ylim = c(0, 0.25), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Chlorophyll, Flow = 8.9")

##kd2 <- density(f8$vel.flow[f8$Chlorophyll=="4.3"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(f8$vel.flow[f8$Chlorophyll=="4.6"])
##lines(kd3, col='yellow', lwd=2)

##kd8 <- density(f8$vel.flow[f8$Chlorophyll=="5.5"])
##lines(kd8, col='orange', lwd=2)

##kd4 <- density(f8$vel.flow[f8$Chlorophyll=="6.1"])
##lines(kd4, col='red', lwd=2)

##kd5 <- density(f8$vel.flow[f8$Chlorophyll=="7.6"])
##lines(kd5, col='dark red', lwd=2)

##kd6 <- density(f8$vel.flow[f8$Chlorophyll=="13.5"])
##lines(kd6, col='purple', lwd=2)

##kd7 <- density(f8$vel.flow[f8$Chlorophyll=="19"])
##lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chlorophyll 5.5", "Chlorophyll 6.1", 
                  "Chlorophyll 7.6", "Chlorophyll 13.5", 'Chlorophyll 19'),
       col = c("blue", "light blue", "yellow", "orange", "red", "dark red", "purple", "black"),
       lty = 1)



##########################################################################

################################# Guano ##################################

###########################################################################
par(mar= c(4,4,2,1))
par(mfrow=c(3,2))
levels(CC.TotalData$Guano)

kd1 <- density(f0$vel.flow[f0$Guano=="Present"])
plot(kd1, xlim = c(-10,10), ylim = c(0, 25), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Guano, Flow = 0")

kd2 <- density(f0$vel.flow[f0$Guano=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)

##kd1 <- density(f.6$vel.flow[f.6$Guano=="Present"])
##plot(kd1, xlim = c(-7,7), ylim = c(0, 0.12), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Guano, Flow = 0.6")

kd2 <- density(f.6$vel.flow[f.6$Guano=="Absent"])
plot(kd2, xlim = c(-10,10), ylim = c(0, 25), col='red', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Guano, Flow = 0.6")
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)

##kd1 <- density(f3$vel.flow[f3$Guano=="Present"])
##plot(kd1, xlim = c(-7,7), ylim = c(0, 0.12), col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Guano, Flow = 3")

kd2 <- density(f3$vel.flow[f3$Guano=="Absent"])
plot(kd2, xlim = c(-10,10), ylim = c(0, 25), col='red', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Guano, Flow = 3")
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)

##kd1 <- density(f5$vel.flow[f5$Guano=="Present"])
##plot(kd1, xlim = c(-7,7), ylim = c(0, 0.12), col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Guano, Flow = 5.9")

kd2 <- density(f5$vel.flow[f5$Guano=="Absent"])
plot(kd2, xlim = c(-10,10), ylim = c(0, 25), col='red', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Guano, Flow = 5.9")
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)

##kd1 <- density(f8$vel.flow[f8$Guano=="Present"])
##plot(kd1, xlim = c(-100,100), ylim = c(0, 0.04), col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Guano, Flow = 8.9")

kd2 <- density(f8$vel.flow[f8$Guano=="Absent"])
plot(kd2, xlim = c(-10,10), ylim = c(0, 25), col='red', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Guano, Flow = 8.9")
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)


##########################################################################

################################# Light ##################################

###########################################################################
par(mar= c(4,4,2,1))
par(mfrow=c(3,2))
levels(CC.TotalData$Light)

kd1 <- density(f0$vel.flow[f0$Light=="Present"])
plot(kd1, xlim = c(-10,10), ylim = c(0, 25), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Light, Flow = 0")

kd2 <- density(f0$vel.flow[f0$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)

kd1 <- density(f.6$vel.flow[f.6$Light=="Present"])
plot(kd1, xlim = c(-10,10), ylim = c(0, 025), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Light, Flow = 0.6")

kd2 <- density(f.6$vel.flow[f.6$Light=="Absent"])
##plot(kd2, xlim = c(-10,10), ylim = c(0, 25), col='red', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Light, Flow = 0.6")
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)

kd1 <- density(f3$vel.flow[f3$Light=="Present"])
plot(kd1, xlim = c(-10,10), ylim = c(0, 25), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Light, Flow = 3")

##kd2 <- density(f3$vel.flow[f3$Light=="Absent"])
##plot(kd2, xlim = c(-10,10), ylim = c(0, 25), col='red', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Light, Flow = 3")
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)

kd1 <- density(f5$vel.flow[f5$Light=="Present"])
plot(kd1, xlim = c(-10,10), ylim = c(0, 25), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Guano, Flow = 5.9")

##kd2 <- density(f5$vel.flow[f5$Light=="Absent"])
##plot(kd2, xlim = c(-10,10), ylim = c(0, 25), col='red', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Light, Flow = 5.9")
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)

kd1 <- density(f8$vel.flow[f8$Light=="Present"])
plot(kd1, xlim = c(-10,10), ylim = c(0, 25), col='blue', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Light, Flow = 8.9")

kd2 <- density(f8$vel.flow[f8$Light=="Absent"])
##plot(kd2, xlim = c(-10,10), ylim = c(0, 25), col='red', lwd=2, main = "Velocity (not logged, in relation to flow) Vs Light, Flow = 8.9")
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)

For each level of Chlorophyll (velocity)


### Kernel density plots ################### velocity
par(mar= c(4,4,2,1))
par(mfrow=c(3,3))

################################ Flow Rate ########################
kd1 <- density(log10(ChlA0$vel.flow[ChlA0$Flow.rate=="0"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Flow Rate, Chlorophyll = 0")

kd2 <- density(log10(ChlA0$vel.flow[ChlA0$Flow.rate=="0.6"]))
lines(kd2, col='light blue', lwd=2)

kd3 <- density(log10(ChlA0$vel.flow[ChlA0$Flow.rate=="3"]))
lines(kd3, col='yellow', lwd=2)

kd4 <- density(log10(ChlA0$vel.flow[ChlA0$Flow.rate=="5.9"]))
lines(kd4, col='orange', lwd=2)

kd5 <- density(log10(ChlA0$vel.flow[ChlA0$Flow.rate=="8.9"]))
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)


kd1 <- density(log10(ChlA4.3$vel.flow[ChlA4.3$Flow.rate=="0"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Flow Rate, Chlorophyll = 4.3")

kd2 <- density(log10(ChlA4.3$vel.flow[ChlA4.3$Flow.rate=="0.6"]))
lines(kd2, col='light blue', lwd=2)

kd3 <- density(log10(ChlA4.3$vel.flow[ChlA4.3$Flow.rate=="3"]))
lines(kd3, col='yellow', lwd=2)

kd4 <- density(log10(ChlA4.3$vel.flow[ChlA4.3$Flow.rate=="5.9"]))
lines(kd4, col='orange', lwd=2)

kd5 <- density(log10(ChlA4.3$vel.flow[ChlA4.3$Flow.rate=="8.9"]))
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(log10(ChlA4.6$vel.flow[ChlA4.6$Flow.rate=="0"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Flow Rate, Chlorophyll = 4.6")

kd2 <- density(log10(ChlA4.6$vel.flow[ChlA4.6$Flow.rate=="0.6"]))
lines(kd2, col='light blue', lwd=2)

kd3 <- density(log10(ChlA4.6$vel.flow[ChlA4.6$Flow.rate=="3"]))
lines(kd3, col='yellow', lwd=2)

kd4 <- density(log10(ChlA4.6$vel.flow[ChlA4.6$Flow.rate=="5.9"]))
lines(kd4, col='orange', lwd=2)

kd5 <- density(log10(ChlA4.6$vel.flow[ChlA4.6$Flow.rate=="8.9"]))
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(log10(ChlA5.5$vel.flow[ChlA5.5$Flow.rate=="0"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Flow Rate, Chlorophyll = 5.5")

kd2 <- density(log10(ChlA5.5$vel.flow[ChlA5.5$Flow.rate=="0.6"]))
lines(kd2, col='light blue', lwd=2)

kd3 <- density(log10(ChlA45.5$vel.flow[ChlA5.5$Flow.rate=="3"]))
lines(kd3, col='yellow', lwd=2)

kd4 <- density(log10(Chl5.5$vel.flow[ChlA5.5$Flow.rate=="5.9"]))
lines(kd4, col='orange', lwd=2)

kd5 <- density(log10(ChlA5.5$vel.flow[ChlA5.5$Flow.rate=="8.9"]))
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(log10(ChlA6$vel.flow[ChlA6$Flow.rate=="0"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Flow Rate, Chlorophyll = 6")

kd2 <- density(log10(ChlA6$vel.flow[ChlA6$Flow.rate=="0.6"]))
lines(kd2, col='light blue', lwd=2)

kd3 <- density(log10(ChlA6$vel.flow[ChlA6$Flow.rate=="3"]))
lines(kd3, col='yellow', lwd=2)

kd4 <- density(log10(ChlA6$vel.flow[ChlA6$Flow.rate=="5.9"]))
lines(kd4, col='orange', lwd=2)

kd5 <- density(log10(ChlA6$vel.flow[ChlA6$Flow.rate=="8.9"]))
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(log10(ChlA7$vel.flow[ChlA7$Flow.rate=="0"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Flow Rate, Chlorophyll = 7")

kd2 <- density(log10(ChlA7$vel.flow[ChlA7$Flow.rate=="0.6"]))
lines(kd2, col='light blue', lwd=2)

kd3 <- density(log10(ChlA7$vel.flow[ChlA7$Flow.rate=="3"]))
lines(kd3, col='yellow', lwd=2)

kd4 <- density(log10(ChlA7$vel.flow[ChlA7$Flow.rate=="5.9"]))
lines(kd4, col='orange', lwd=2)

kd5 <- density(log10(ChlA7$vel.flow[ChlA7$Flow.rate=="8.9"]))
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(log10(ChlA13$vel.flow[ChlA13$Flow.rate=="0"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Flow Rate, Chlorophyll = 13")

kd2 <- density(log10(ChlA13$vel.flow[ChlA13$Flow.rate=="0.6"]))
lines(kd2, col='light blue', lwd=2)

kd3 <- density(log10(ChlA13$vel.flow[ChlA13$Flow.rate=="3"]))
lines(kd3, col='yellow', lwd=2)

kd4 <- density(log10(ChlA13$vel.flow[ChlA13$Flow.rate=="5.9"]))
lines(kd4, col='orange', lwd=2)

kd5 <- density(log10(ChlA13$vel.flow[ChlA13$Flow.rate=="8.9"]))
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(log10(ChlA19$vel.flow[ChlA19$Flow.rate=="0"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Flow Rate, Chlorophyll = 19")

kd2 <- density(log10(ChlA19$vel.flow[ChlA19$Flow.rate=="0.6"]))
lines(kd2, col='light blue', lwd=2)

kd3 <- density(log10(ChlA19$vel.flow[ChlA19$Flow.rate=="3"]))
lines(kd3, col='yellow', lwd=2)

kd4 <- density(log10(ChlA19$vel.flow[ChlA19$Flow.rate=="5.9"]))
lines(kd4, col='orange', lwd=2)

kd5 <- density(log10(ChlA19$vel.flow[ChlA19$Flow.rate=="8.9"]))
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)




#############################  Light  ######################################
par(mar= c(4,4,2,1))
par(mfrow=c(3,3))

kd1 <- density(log10(ChlA0$vel.flow[ChlA0$Light=="Present"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Light, Chlorophyll = 0")

kd2 <- density(log10(ChlA0$vel.flow[ChlA0$Light=="Absent"]))
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(log10(ChlA4.3$vel.flow[ChlA4.3$Light=="Present"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Light, Chlorophyll = 4.3")

kd2 <- density(log10(ChlA4.3$vel.flow[ChlA4.3$Light=="Absent"]))
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(log10(ChlA4.6$vel.flow[ChlA4.6$Light=="Present"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Light, Chlorophyll = 4.6")

kd2 <- density(log10(ChlA4.6$vel.flow[ChlA4.6$Light=="Absent"]))
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(log10(ChlA5.5$vel.flow[ChlA5.5$Light=="Present"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Light, Chlorophyll = 5.5")

kd2 <- density(log10(ChlA5.5$vel.flow[ChlA5.5$Light=="Absent"]))
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(log10(ChlA6$vel.flow[ChlA6$Light=="Present"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Light, Chlorophyll = 6")

kd2 <- density(log10(ChlA6$vel.flow[ChlA6$Light=="Absent"]))
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(log10(ChlA7$vel.flow[ChlA7$Light=="Present"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Light, Chlorophyll = 7")

kd2 <- density(log10(ChlA7$vel.flow[ChlA7$Light=="Absent"]))
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(log10(ChlA13$vel.flow[ChlA13$Light=="Present"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Light, Chlorophyll = 13")

kd2 <- density(log10(ChlA13$vel.flow[ChlA13$Light=="Absent"]))
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(log10(ChlA19$vel.flow[ChlA19$Light=="Present"]))
plot(kd1, col='blue', lwd=2, main = "Velocity (logged, in relation to flow) Vs Light, Chlorophyll = 19")

kd2 <- density(log10(ChlA19$vel.flow[ChlA19$Light=="Absent"]))
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


range(CC.TotalData$turn.angle)

Now for each level of Flow (for headings)


### Kernel density plots ################### Headings
par(mar= c(4,4,2,1))
par(mfrow=c(1,2))

f0$heading <- atan2(f0$dx, f0$dy)
range(f0$heading)
f0$heading.pi <- f0$heading/(2*pi)*360
range(CC.TotalData$heading)  ## gives -3.14 to 3.14
range(f0$heading.pi)  ## gives -180 to 180  


f.6$heading <- atan2(f.6$dx, f.6$dy)
range(f.6$heading)
f.6$heading.pi <- f.6$heading/(2*pi)*360
range(CC.TotalData$heading)  ## gives -3.14 to 3.14
range(f.6$heading.pi)  ## gives -180 to 180  


f3$heading <- atan2(f3$dx, f3$dy)
range(f3$heading)
f3$heading.pi <- f3$heading/(2*pi)*360
range(CC.TotalData$heading)  ## gives -3.14 to 3.14
range(f3$heading.pi)  ## gives -180 to 180  


f5$heading <- atan2(f5$dx, f5$dy)
range(f5$heading)
f5$heading.pi <- f5$heading/(2*pi)*360
range(CC.TotalData$heading)  ## gives -3.14 to 3.14
range(f5$heading.pi)  ## gives -180 to 180  


f8$heading <- atan2(f8$dx, f8$dy)
range(f8$heading)
f8$heading.pi <- f8$heading/(2*pi)*360
range(CC.TotalData$heading)  ## gives -3.14 to 3.14
range(f8$heading.pi)  ## gives -180 to 180  


################################ Chlorophyll ########################
levels(CC.TotalData$Chlorophyll)

par(mar= c(4,4,2,1))
par(mfrow=c(1,2))

kd1 <- density(f0$heading.pi[f0$Chlorophyll=="0"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Flow = 0", xlab = "Heading (degrees)")

##kd2 <- density(f0$heading.pi[f0$Chlorophyll=="4.3"])
##lines(kd2, col='light blue', lwd=2)

kd3 <- density(f0$heading.pi[f0$Chlorophyll=="4.6"])
lines(kd3, col='yellow', lwd=2)

kd8 <- density(f0$heading.pi[f0$Chlorophyll=="5.5"])
lines(kd8, col='orange', lwd=2)

##kd4 <- density(f0$heading.pi[f0$Chlorophyll=="6.1"])
##lines(kd4, col='red', lwd=2)

kd5 <- density(f0$heading.pi[f0$Chlorophyll=="7.6"])
lines(kd5, col='dark red', lwd=2)

##kd6 <- density(f0$heading.pi[f0$Chlorophyll=="13.5"])
##lines(kd6, col='purple', lwd=2)

kd7 <- density(f0$heading.pi[f0$Chlorophyll=="19"])
lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0",  "Chlorophyll 4.6", "Chlorophyll 5.5",  
                  "Chlorophyll 7.6",  'Chlorophyll 19'),
       col = c("blue",  "yellow", "orange",  "dark red", "black"),
       lty = 1)



kd1 <- density(f.6$heading.pi[f.6$Chlorophyll=="0"])
plot(kd1,xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Flow = 0.6", xlab = "Heading (degrees)")

kd2 <- density(f.6$heading.pi[f.6$Chlorophyll=="4.3"])
lines(kd2, col='light blue', lwd=2)

kd3 <- density(f.6$heading.pi[f.6$Chlorophyll=="4.6"])
lines(kd3, col='yellow', lwd=2)

##kd8 <- density(f.6$heading.pi[f.6$Chlorophyll=="5.5"])
##lines(kd8, col='orange', lwd=2)

kd4 <- density(f.6$heading.pi[f.6$Chlorophyll=="6.1"])
lines(kd4, col='red', lwd=2)

##kd5 <- density(f.6$heading.pi[f.6$Chlorophyll=="7.6"])
##lines(kd5, col='dark red', lwd=2)

kd6 <- density(f.6$heading.pi[f.6$Chlorophyll=="13.5"])
lines(kd6, col='purple', lwd=2)

##kd7 <- density(f.6$heading.pi[f.6$Chlorophyll=="19"])
##lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chlorophyll 6.1", 
              "Chlorophyll 13.5"),
       col = c("blue", "light blue", "yellow",  "red", "purple"),
       lty = 1)


kd1 <- density(f3$heading.pi[f3$Chlorophyll=="0"])
plot(kd1,xlim = c(-180,180), ylim = c(0, 0.03), col='blue', lwd=2, main = "Headings Vs Chlorophyll, Flow = 3")

##kd2 <- density(f3$heading.pi[f3$Chlorophyll=="4.3"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(f3$heading.pi[f3$Chlorophyll=="4.6"])
##lines(kd3, col='yellow', lwd=2)

##kd8 <- density(f3$heading.pi[f3$Chlorophyll=="5.5"])
##lines(kd8, col='orange', lwd=2)

##kd4 <- density(f3$heading.pi[f3$Chlorophyll=="6.1"])
##lines(kd4, col='red', lwd=2)

##kd5 <- density(f3$heading.pi[f3$Chlorophyll=="7.6"])
##lines(kd5, col='dark red', lwd=2)

##kd6 <- density(f3$heading.pi[f3$Chlorophyll=="13.5"])
##lines(kd6, col='purple', lwd=2)

##kd7 <- density(f3$heading.pi[f3$Chlorophyll=="19"])
##lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chlrophyll 5.5", "Chlorophyll 6.1", 
                  "Chlorophyll 7.6", "Chlorophyll 13.5", 'Chlorophyll 19'),
       col = c("blue", "light blue", "yellow", "orange", "red", "dark red", "purple", "black"),
       lty = 1)



kd1 <- density(f5$heading.pi[f5$Chlorophyll=="0"])
plot(kd1,xlim = c(-180,180), ylim = c(0, 0.03), col='blue', lwd=2, main = "Headings Vs Chlorophyll, Flow = 5.9")

##kd2 <- density(f5$heading.pi[f5$Chlorophyll=="4.3"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(f5$heading.pi[f5$Chlorophyll=="4.6"])
##lines(kd3, col='yellow', lwd=2)

##kd8 <- density(f5$heading.pi[f5$Chlorophyll=="5.5"])
##lines(kd8, col='orange', lwd=2)

##kd4 <- density(f5$heading.pi[f5$Chlorophyll=="6.1"])
##lines(kd4, col='red', lwd=2)

##kd5 <- density(f5$heading.pi[f5$Chlorophyll=="7.6"])
##lines(kd5, col='dark red', lwd=2)

##kd6 <- density(f5$heading.pi[f5$Chlorophyll=="13.5"])
##lines(kd6, col='purple', lwd=2)

##kd7 <- density(f5$heading.pi[f5$Chlorophyll=="19"])
##lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chlorophyll 5.5", "Chlorophyll 6.1", 
                  "Chlorophyll 7.6", "Chlorophyll 13.5", 'Chlorophyll 19'),
       col = c("blue", "light blue", "yellow", "orange", "red", "dark red", "purple", "black"),
       lty = 1)

kd1 <- density(f8$heading.pi[f8$Chlorophyll=="0"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.03), col='blue', lwd=2, main = "Headings Vs Chlorophyll, Flow = 8.9")

##kd2 <- density(f8$heading.pi[f8$Chlorophyll=="4.3"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(f8$heading.pi[f8$Chlorophyll=="4.6"])
##lines(kd3, col='yellow', lwd=2)

##kd8 <- density(f8$heading.pi[f8$Chlorophyll=="5.5"])
##lines(kd8, col='orange', lwd=2)

##kd4 <- density(f8$heading.pi[f8$Chlorophyll=="6.1"])
##lines(kd4, col='red', lwd=2)

##kd5 <- density(f8$heading.pi[f8$Chlorophyll=="7.6"])
##lines(kd5, col='dark red', lwd=2)

##kd6 <- density(f8$heading.pi[f8$Chlorophyll=="13.5"])
##lines(kd6, col='purple', lwd=2)

##kd7 <- density(f8$heading.pi[f8$Chlorophyll=="19"])
##lines(kd7, col='black', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Chlorophyll  0", "Chlorophyll 4.3", "Chlorophyll 4.6", "Chlorophyll 5.5", "Chlorophyll 6.1", 
                  "Chlorophyll 7.6", "Chlorophyll 13.5", 'Chlorophyll 19'),
       col = c("blue", "light blue", "yellow", "orange", "red", "dark red", "purple", "black"),
       lty = 1)


#####################################################################

################################# Guano ##################################

######################################################################

par(mar= c(4,4,2,1))
par(mfrow=c(3,2))
levels(CC.TotalData$Guano)

kd1 <- density(f0$heading.pi[f0$Guano=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.03), col='blue', lwd=2, main = "Headings Vs Guano, Flow = 0")

kd2 <- density(f0$heading.pi[f0$Guano=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)



##kd1 <- density(f.6$heading.pi[f.6$Guano=="Present"])
##plot(kd1, xlim = c(-180,180), ylim = c(0, 0.01), col='blue', lwd=2, main = "Headings Vs Guano, Flow = 0.6")

kd2 <- density(f.6$heading.pi[f.6$Guano=="Absent"])
plot(kd2, xlim = c(-180,180), ylim = c(0, 0.03), col='red', lwd=2, main = "Headings Vs Guano, Flow = 0.6")
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)



##kd1 <- density(f3$heading.pi[f3$Guano=="Present"])
##plot(kd1, xlim = c(-180,180), ylim = c(0, 0.01), col='blue', lwd=2, main = "Headings Vs Guano, Flow = 3")

kd2 <- density(f3$heading.pi[f3$Guano=="Absent"])
plot(kd2, xlim = c(-180,180), ylim = c(0, 0.03), col='red', lwd=2, main = "Headings Vs Guano, Flow = 3")
##lines(kd2, col='red', lwd=2)

legend("topright",                              # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)



##kd1 <- density(f5$heading.pi[f5$Guano=="Present"])
##plot(kd1, xlim = c(5,175), ylim = c(0, 0.03), col='blue', lwd=2, main = "Headings Vs Guano, Flow = 5.9")

kd2 <- density(f5$heading.pi[f5$Guano=="Absent"])
plot(kd2, xlim = c(-180,180), ylim = c(0, 0.03), col='red', lwd=2, main = "Headings Vs Guano, Flow = 5.9")
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)



##kd1 <- density(f8$heading.pi[f8$Guano=="Present"])
##plot(kd1, xlim = c(5,175), ylim = c(0, 0.03), col='blue', lwd=2, main = "Headings Vs Guano, Flow = 8.9")

kd2 <- density(f8$heading.pi[f8$Guano=="Absent"])
plot(kd2, xlim = c(-180,180), ylim = c(0, 0.03), col='red', lwd=2, main = "Headings Vs Guano, Flow = 8.9")
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Guano Present", "Guano Absent"),
       col = c("blue", "red"),
       lty = 1)


################################################################

################################ Light ########################

#################################################################


par(mar= c(4,4,2,1))
par(mfrow=c(3,2))
levels(CC.TotalData$Light)

kd1 <- density(f0$heading.pi[f0$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.015), col='blue', lwd=2, main = "Headings Vs Light, Flow = 0")

kd2 <- density(f0$heading.pi[f0$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(f.6$heading.pi[f.6$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.015), col='blue', lwd=2, main = "Headings Vs Light, Flow = 0.6")

kd2 <- density(f.6$heading.pi[f.6$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(f3$heading.pi[f3$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.015), col='blue', lwd=2, main = "Headings Vs Light, Flow = 3")

##kd2 <- density(f3$heading.pi[f3$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(f5$heading.pi[f5$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.015), col='blue', lwd=2, main = "Headings Vs Light, Flow = 5.9")

##kd2 <- density(f5$heading.pi[f5$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(f8$heading.pi[f8$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.015), col='blue', lwd=2, main = "Headings Vs Light, Flow = 8.9")

kd2 <- density(f8$heading.pi[f8$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)

Now for each level of Chlorophyll (for headings)


### Kernel density plots ################### Headings
par(mar= c(4,4,2,1))
par(mfrow=c(3,3))

################################ Flow Rate ########################
levels(CC.TotalData$Flow.rate)

par(mar= c(4,4,2,1))
par(mfrow=c(3,3))

kd1 <- density(ChlA0$heading.pi[ChlA0$Flow.rate=="0"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.012), col='blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 0")

kd2 <- density(ChlA0$heading.pi[ChlA0$Flow.rate=="0.6"])
lines(kd2, col='light blue', lwd=2)

kd3 <- density(ChlA0$heading.pi[ChlA0$Flow.rate=="3"])
lines(kd3, col='yellow', lwd=2)

kd4 <- density(ChlA0$heading.pi[ChlA0$Flow.rate=="5.9"])
lines(kd4, col='orange', lwd=2)

kd5 <- density(ChlA0$heading.pi[ChlA0$Flow.rate=="8.9"])
lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)




##kd1 <- density(ChlA4.3$heading.pi[ChlA4.3$Flow.rate=="0"])
##plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 4.3")

kd2 <- density(ChlA4.3$heading.pi[ChlA4.3$Flow.rate=="0.6"])
plot(kd2, xlim = c(-180,180), ylim = c(0, 0.012), col='light blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 4.3")
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA4.3$heading.pi[ChlA4.3$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA4.3$heading.pi[ChlA4.3$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA4.3$heading.pi[ChlA4.3$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(ChlA4.6$heading.pi[ChlA4.6$Flow.rate=="0"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.012), col='blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 4.6")

kd2 <- density(ChlA4.6$heading.pi[ChlA4.6$Flow.rate=="0.6"])
##plot(kd2, xlim = c(5,175), ylim = c(0, 0.02), col='light blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 4.6")
lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA4.6$heading.pi[ChlA4.6$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA4.6$heading.pi[ChlA4.6$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA4.6$heading.pi[ChlA4.6$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(ChlA5.5$heading.pi[ChlA5.5$Flow.rate=="0"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.012), col='blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 5.5")

##kd2 <- density(ChlA5.5$heading.pi[ChlA5.5$Flow.rate=="0.6"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA5.5$heading.pi[ChlA5.5$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA5.5$heading.pi[ChlA5.5$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA5.5$heading.pi[ChlA5.5$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



##kd1 <- density(ChlA6$heading.pi[ChlA6$Flow.rate=="0"])
##plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 6")

kd2 <- density(ChlA6$heading.pi[ChlA6$Flow.rate=="0.6"])
plot(kd2, xlim = c(-180,180), ylim = c(0, 0.012), col='light blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 6")
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA6$heading.pi[ChlA6$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA6$heading.pi[ChlA6$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA6$heading.pi[ChlA6$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(ChlA7$heading.pi[ChlA7$Flow.rate=="0"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.012), col='blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 7")

##kd2 <- density(ChlA7$heading.pi[ChlA7$Flow.rate=="0.6"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA7$heading.pi[ChlA7$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA7$heading.pi[ChlA7$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA7$heading.pi[ChlA7$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



##kd1 <- density(ChlA13$heading.pi[ChlA13$Flow.rate=="0"])
##plot(kd1, xlim = c(5,175), ylim = c(0, 0.02), col='blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 13")

kd2 <- density(ChlA13$heading.pi[ChlA13$Flow.rate=="0.6"])
plot(kd2, xlim = c(-180,180), ylim = c(0, 0.012), col='light blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 13")
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA13$heading.pi[ChlA13$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA13$heading.pi[ChlA13$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA13$heading.pi[ChlA13$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)



kd1 <- density(ChlA19$heading.pi[ChlA19$Flow.rate=="0"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.012), col='blue', lwd=2, main = "Heading Vs Flow Rate, Chlorophyll = 19")

##kd2 <- density(ChlA19$heading.pi[ChlA19$Flow.rate=="0.6"])
##lines(kd2, col='light blue', lwd=2)

##kd3 <- density(ChlA19$heading.pi[ChlA19$Flow.rate=="3"])
##lines(kd3, col='yellow', lwd=2)

##kd4 <- density(ChlA19$heading.pi[ChlA19$Flow.rate=="5.9"])
##lines(kd4, col='orange', lwd=2)

##kd5 <- density(ChlA19$heading.pi[ChlA19$Flow.rate=="8.9"])
##lines(kd5, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Flow rate  0", "Flow rate 0.6", "Flow rate 3", "Flow rate 5.9", "Flow rate 8.9"),
       col = c("blue", "light blue", "yellow", "orange", "red"),
       lty = 1)


###########################################################################

#############################  Light  ######################################

###########################################################################

par(mar= c(4,4,2,1))
par(mfrow=c(3,3))

kd1 <- density(ChlA0$heading.pi[ChlA0$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Headings Vs Light, Chlorophyll = 0")

kd2 <- density(ChlA0$heading.pi[ChlA0$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA4.3$heading.pi[ChlA4.3$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Headings Vs Light, Chlorophyll = 4.3")

##kd2 <- density(ChlA4.3$heading.pi[ChlA4.3$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA4.6$heading.pi[ChlA4.6$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Headings Vs Light, Chlorophyll = 4.6")

##kd2 <- density(ChlA4.6$heading.pi[ChlA4.6$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA5.5$heading.pi[ChlA5.5$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Headings Vs Light, Chlorophyll = 5.5")

##kd2 <- density(ChlA5.5$heading.pi[ChlA5.5$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(ChlA6$heading.pi[ChlA6$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Headings Vs Light, Chlorophyll = 6")

##kd2 <- density(ChlA6$heading.pi[ChlA6$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA7$heading.pi[ChlA7$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Headings Vs Light, Chlorophyll = 7")

kd2 <- density(ChlA7$heading.pi[ChlA7$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)



kd1 <- density(ChlA13$heading.pi[ChlA13$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Headings Vs Light, Chlorophyll = 13")

##kd2 <- density(ChlA13$heading.pi[ChlA13$Light=="Absent"])
##lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)


kd1 <- density(ChlA19$heading.pi[ChlA19$Light=="Present"])
plot(kd1, xlim = c(-180,180), ylim = c(0, 0.02), col='blue', lwd=2, main = "Headings Vs Light, Chlorophyll = 19")

kd2 <- density(ChlA19$heading.pi[ChlA19$Light=="Absent"])
lines(kd2, col='red', lwd=2)

legend("topright",                                  # Add legend to density
       legend = c("Light Present", "Light Absent"),
       col = c("blue", "red"),
       lty = 1)
LS0tDQp0aXRsZTogIm5vdGVib29rMDkgLSBTdGF0aXN0aWNhbCBBbmFseXNpcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyfQ0Kcm0obGlzdD1scyhhbGw9VFJVRSkpDQpsb2FkKCJ+L1Bvc3QtZG9jL0RhdGEvVG90YWwgTWVyZ2VkIERhdGEgRmlsZSAoSnVseSAyNCAyMDIzKS5SRGF0YSIpDQpzdHIoQ0MuVG90YWxEYXRhKQ0KYGBgDQoNCkRhdGEgZm9yIG1lYW4gdmVsb2NpdHksIGFuZ3VsYXIgdmVsb2NpdHksIHR1cm4gYW5kIGhlYWRpbmcgYW5nbGVzIGVhY2ggd2lsbCBiZSBhbmFseXplZCBieSBhIG1peGVkIG1vZGVsIEFOQ09WQSB3aXRoIGNoZW1pY2FsIGNvbmNlbnRyYXRpb24sIGFuZCBsaWdodCBhcyBmaXhlZCAodHJlYXRtZW50KSBlZmZlY3RzLCBmbG93IHZlbG9jaXR5IGFzIHRoZSBjby12YXJpYXRlIGFuZCByZXBsaWNhdGUgYXMgYSByYW5kb20gKGJsb2NraW5nIGFmZmVjdCkgd2l0aCBpbmRpdmlkdWFsIHBhdGhzIGFzIHRoZSB1bml0IG9mIGFuYWx5c2lzLg0KDQpgYGB7cn0NCg0KIyNUbyBydW4gQU5DT1ZBIGluIFIgbG9hZCB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOg0KbGlicmFyeShjYXIpDQpsaWJyYXJ5KGNvbXB1dGUuZXMpDQpsaWJyYXJ5KGVmZmVjdHMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KG11bHRjb21wKQ0KbGlicmFyeShwYXN0ZWNzKQ0KbGlicmFyeShXUlMyKQ0KDQojI0lmIHlvdSBhcmUgdXNpbmcgbG0gb3IgYW92IG1ha2Ugc3VyZSB0aGF0IHlvdSBzZXQgdGhlIGNvbnRyYXN0cyB1c2luZyB0aGUgImNvbnRyYXN0cyIgZnVuY3Rpb24gYmVmb3JlIGRvaW5nIGVpdGhlciBhb3Ygb3IgbG0uIFIgdXNlcyBub24tb3J0aG9nb25hbCBjb250cmFzdHMgYnkgZGVmYXVsdCB3aGljaCBjYW4gbWVzcyBldmVyeXRoaW5nIHVwIGluIGFuIEFOQ09WQS4gSWYgeW91IHdhbnQgdG8gc2V0IG9ydGhvZ29uYWwgY29udHJhc3RzIHVzZToNCg0KY29udHJhc3RzKGRhdGFuYW1lJGZhY3RvcnZhcmlhYmxlKT1jb250ci5wb2x5KCkjIG9mIGxldmVscywgaS5lLiAzKSAjI2V4YW1wbGUNCmNvbnRyYXN0cyhDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGwpPWNvbnRyLnBvbHkoNykNCiMjdGhlbiBydW4geW91ciBtb2RlbCBhcw0KDQptb2RlbC4xPWFvdihkdn5jb3ZhcmlhdGUrZmFjdG9ydmFyaWFibGUsIGRhdGE9ZGF0YW5hbWUpICMjIGV4YW1wbGUNCm1vZDE9YW92KHZlbC5mbG93fkZsb3cucmF0ZStDaGxvcm9waHlsbCwgZGF0YT1DQy5Ub3RhbERhdGEpDQojI1RvIHZpZXcgdGhlIG1vZGVsIHVzZToNCg0KQW5vdmEobW9kZWwuMSwgdHlwZT0iSUlJIikgIyMgZXhhbXBsZQ0KQW5vdmEobW9kMSwgdHlwZT0iSUlJIikNCiMjTWFrZSBzdXJlIHlvdSB1c2UgY2FwaXRhbCAiQSIgQW5vdmEgaGVyZSBhbmQgbm90IGFub3ZhLiBUaGlzIHdpbGwgZ2l2ZSByZXN1bHRzIHVzaW5nIHR5cGUgSUlJIFNTLg0KDQpzdW1tYXJ5LmxtKG1vZGVsLjEpICMjd2lsbCBnaXZlIGFub3RoZXIgc3VtbWFyeSBhbmQgaW5jbHVkZXMgdGhlIFItc3EuIG91dHB1dC4gRXhhbXBsZQ0Kc3VtbWFyeS5sbShtb2QxKQ0KDQpwb3N0aD1nbGh0KG1vZGVsLjEsIGxpbmZjdD1tY3AoZmFjdG9ydmFyaWFibGU9IlR1a2V5IikpICAjI2dpdmVzIHRoZSBwb3N0LWhvYyBUdWtleSBhbmFseXNpcy4gRXhhbXBsZQ0KcG9zdGg9Z2xodChtb2QxLCBsaW5mY3Q9bWNwKENobG9yb3BoeWxsPSJUdWtleSIpKQ0Kc3VtbWFyeShwb3N0aCkgIyNzaG93cyB0aGUgb3V0cHV0IGluIGEgbmljZSBmb3JtYXQuDQoNCiMjSWYgeW91IHdhbnQgdG8gdGVzdCBmb3IgaG9tb2dlbmVpdHkgb2YgcmVncmVzc2lvbiBzbG9wZXMgeW91IGNhbiBhbHNvIGluY2x1ZGUgYW4gaW50ZXJhY3Rpb24gdGVybSBmb3IgdGhlIElWIGFuZCBjb3ZhcmlhdGUuIFRoYXQgd291bGQgYmU6DQoNCm1vZGVsPWFvdihkdn5jb3ZhcmlhdGUrSVYrY292YXJpYXRlOklWLCBkYXRhPWRhdGFuYW1lKSAjIyBleGFtcGxlDQoNCm1vZDI9YW92KHZlbC5mbG93fkZsb3cucmF0ZStDaGxvcm9waHlsbCtGbG93LnJhdGU6Q2hsb3JvcGh5bGwsIGRhdGE9Q0MuVG90YWxEYXRhKSAjIyBub3QgcmlnaHQ/DQojI0lmIHRoZSBpbnRlcmFjdGlvbiB0ZXJtIGlzIHNpZ25pZmljYW50IHRoZW4geW91IGRvIG5vdCBoYXZlIGhvbW9nZW5laXR5Lg0KDQoNCmBgYA0KDQpTdGF0cyBvbiBlYWNoIGxldmVsDQoNCmBgYHtyfQ0KIyNMb29raW5nIGF0IG90aGVyIHN0YXRzIHdlIGNvdWxkIHJ1bg0KbGlicmFyeShubG1lKQ0KbGlicmFyeShsbWU0KQ0KbGlicmFyeShlZmZlY3RzKQ0KDQoNCiMjIGV4YW1wbGUNCmQgPC0gZGF0YS5mcmFtZSgNCiAgICBZID0gcm5vcm0oNDgpLCAgIyMjIGUuZy4gdmVsb2NpdHkNCiAgICBzdWJqZWN0ID0gZmFjdG9yKHJlcCgxOjEyLCA0KSksICAjIyMgZS5nLiBEX1ZfVA0KICAgIEEgPSBmYWN0b3IocmVwKDE6MiwgZWFjaD0yNCkpLCAgICMjIyMgZS5nLiBMaWdodA0KICAgIEIgPSBmYWN0b3IocmVwKHJlcCgxOjIsIGVhY2g9MTIpLCAyKSkpICAgIyMjIGUuZy4gRmxvdy5yYXRlDQoNCnN1bW1hcnkoYW92KFkgfiBBKkIgKyBFcnJvcihzdWJqZWN0LyhBKkIpKSwgZGF0YT1kKSkgICMgU3RhbmRhcmQgcmVwZWF0ZWQgbWVhc3VyZXMgQU5PVkENCg0KbW9kZTEgPC0gbG1lKFl+QSpCLCByYW5kb20gPSB+MXxzdWJqZWN0LCBkYXRhPWQpICAjIyBubG1lDQoNCmxtZXIoWSB+IEEqQiArICgxfHN1YmplY3QpICsgKDF8QTpzdWJqZWN0KSArICgxfEI6c3ViamVjdCksIGRhdGE9ZCkgICMjIyBsbWU0DQoNCg0KDQojIyMjIyMjIyMgICAgb3VyIGRhdGEgdXNpbmcgbmxtZSBwYWNrYWdlICAgICAjIyMjIyMjIyMNCg0KbW9kZTEgPC0gbG1lKHBpdGNoLnBlcmZlY3R+Q2hsb3JvcGh5bGwqTGlnaHQsIHJhbmRvbT0gfjF8RF9WX1QsIGRhdGE9Q0MuVG90YWxEYXRhKQ0KDQptb2RlMiA8LSBsbWUocGl0Y2gucGVyZmVjdH5MaWdodCwgcmFuZG9tPSB+MXxEX1ZfVCwgZGF0YT1DQy5Ub3RhbERhdGEpDQoNCmFub3ZhKG1vZGUxLCBtb2RlMikgI2lmIGl0IHNob3dzIG9ubHkgbWlub3IgaW1wcm92ZW1lbnQsIG5vIG5lZWQgdG8gaW5jbHVkZSBtaXNzaW5nIGZhY3Rvcg0KDQphbm92YShtb2RlMikNCg0KDQojIyMjIyMjIyMgICAgb3VyIGRhdGEgdXNpbmcgbDRtZSBwYWNrYWdlICAgICAjIyMjIyMjIyMNCg0KbW9kZWwxIDwtIGxtZXIodmVsLmZsb3cgfiBGbG93LnJhdGUqQ2hsb3JvcGh5bGwgKyAoMXxEX1ZfVCkgKyAoMXxGbG93LnJhdGU6RF9WX1QpICsgKDF8Q2hsb3JvcGh5bGw6RF9WX1QpLCBkYXRhPUNDLlRvdGFsRGF0YSkgICMjIw0KDQptb2RlbDIgPC0gbG1lcih2ZWwuZmxvdyB+IEZsb3cucmF0ZSArICgxfERfVl9UKSArICgxfEZsb3cucmF0ZTpEX1ZfVCksIGRhdGE9Q0MuVG90YWxEYXRhKQ0KDQphbm92YShtb2RlbDEsIG1vZGVsMikgI2lmIGl0IHNob3dzIG9ubHkgbWlub3IgaW1wcm92ZW1lbnQsIG5vIG5lZWQgdG8gaW5jbHVkZSBtaXNzaW5nIGZhY3Rvcg0KDQphbm92YShtb2RlbDEpDQoNCiMjIyMjIyMjIyBwbG90dGluZyBlZmZlY3Qgb2YgdGhlIG1vZGVscyAgICAjIyMjIyMjIyMjDQpwbG90KGVmZmVjdCgidHVybi5hbmdsZSpGbG93LnJhdGUiLHNlPVRSVUUsIGNvbmZpZGVuY2UubGV2ZWw9Ljk1LCBtb2RlMikpDQoNCg0KIyMjIyMjIGludGVyYWN0aW9uIHBsb3Qgd2l0aCBMYXR0aWNlIGV4dHJhICMjIyMjIyMjIw0KbGlicmFyeShsYXR0aWNlRXh0cmEpDQp4eXBsb3QoQ0MuVG90YWxEYXRhJHZlbC5mbG93fkNDLlRvdGFsRGF0YSR0dXJuLmFuZ2xlfENDLlRvdGFsRGF0YSRMaWdodCpDQy5Ub3RhbERhdGEkRmxvdy5yYXRlLCAgbWFpbj0iU2NhdHRlcnBsb3RzIGJ5IExpZ2h0IGFuZCBGbG93IFJhdGUiLCANCiAgIHlsYWI9IlZlbC5mbG93IiwgeGxhYj0iVHVybiBBbmdsZSIpICsNCiAgIGxheWVyKHBhbmVsLmFibGluZXEobG0oeSB+IHgpLCByLnNxID0gVFJVRSwNCiAgIGF0ID0gMC43NSwgYWRqPTE6NSksIHN0eWxlID0gNCkNCg0KDQojIyMjIyMjIyMjIyMjIyBpbnRlcmFjdGlvbiBwbG90cyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KaW50ZXJhY3Rpb24ucGxvdChDQy5Ub3RhbERhdGEkdmVsLmZsb3csICMjIHggYXhpcw0KICAgICAgICAgICAgICAgICBDQy5Ub3RhbERhdGEkRmxvdy5yYXRlLCAjIyBmYWN0b3IgZm9yIGxpbmVzDQogICAgICAgICAgICAgICAgIENDLlRvdGFsRGF0YSR0dXJuLmFuZ2xlLCAgIyMgeSBheGlzDQogICAgICAgICAgICAgICAgIGZ1biA9IG1lYW4sDQogICAgICAgICAgICAgICAgIHR5cGUgPSBjKCJiIiksIGxlZ2VuZCA9IFRSVUUsDQogICAgICAgICAgICAgICAgIHRyYWNlLmxhYmVsID0gIkZsb3cgUmF0ZSIsDQogICAgICAgICAgICAgICAgIHlsaW0gPSBjKC0xLDE4MCksDQogICAgICAgICAgICAgICAgIG1haW4gPSAiTGlnaHRzIE9uIiwNCiAgICAgICAgICAgICAgICAgeGxhYiA9ICJ2ZWwuZmxvdyIsDQogICAgICAgICAgICAgICAgIHlsYWIgPSAidHVybiBhbmdsZSIsDQogICAgICAgICAgICAgICAgIGNvbCA9IENDLlRvdGFsRGF0YSRGbG93LnJhdGUsIHBjaCA9IGMoMTo5KSwNCiAgICAgICAgICAgICAgICAgYXhlcyA9IFRSVUUpDQojbGlicmFyeSh0aWR5cikNCiNsaWJyYXJ5KGRwbHlyKQ0KI0NDLlRvdGFsRGF0YSAlPiUgbXV0YXRlX2FsbCh+cmVwbGFjZSguLCBpcy5uYW4oLiksIDApKQ0KQ0MuVG90YWxEYXRhW2lzLm5hbihDQy5Ub3RhbERhdGEpXSA8LSAwDQpyYW5nZShDQy5Ub3RhbERhdGEkbG9nLnZlbC5mbG93KQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpybShtb2RlMSkNCg0Kcm0obW9kZTIpDQoNCg0KbW9kMSA8LSBsbSh2ZWwuZmxvd35GbG93LnJhdGUqQ2hsb3JvcGh5bGwsIGRhdGEgPSBDQy5Ub3RhbERhdGEpDQpzdW1tYXJ5KG1vZGUyKQ0KDQpgYGANCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiAgICAgICAgICAgICAgICAgS2VybmVsIERlbnNpdHkgUGxvdHMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpUdXJuIEFuZ2xlcyBmaXJzdC4uLg0KDQpgYGB7cn0NCnJtKGtkMSwga2QyLCBrZDMsIGtkNCwga2Q1LCBrZDYsIGtkNywga2Q4KQ0KDQojIyMgS2VybmVsIGRlbnNpdHkgcGxvdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyBUdXJuIEFuZ2xlcw0KcGFyKG1hcj0gYyg0LDQsMiwxKSkNCnBhcihtZnJvdz1jKDIsMikpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZsb3cgUmF0ZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnN0cihDQy5Ub3RhbERhdGEpDQpsZXZlbHMoQ0MuVG90YWxEYXRhJEZsb3cucmF0ZSkNCg0Ka2QxIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGVbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjAiXSwgbmEucm09IFQpDQpwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAzMCksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIEZsb3cgUmF0ZSIpDQoNCm1lYW4oQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGVbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjAiXSwgbmEucm0gPSBUKQ0KIyBDcmVhdGUgdGhlIGZ1bmN0aW9uLg0KZ2V0bW9kZSA8LSBmdW5jdGlvbih2KSB7DQogICB1bmlxdiA8LSB1bmlxdWUodikNCiAgIHVuaXF2W3doaWNoLm1heCh0YWJ1bGF0ZShtYXRjaCh2LCB1bmlxdikpKV0NCn0NCmdldG1vZGUoQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGVbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjAiXSkNCm1lZGlhbihDQy5Ub3RhbERhdGEkdHVybi5hbmdsZVtDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iMCJdLCBuYS5ybSA9IFQpDQoNCg0Ka2QyIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGVbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjAuNiJdLCBuYS5ybSA9IFQpDQpsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQprZDMgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkdHVybi5hbmdsZVtDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iMyJdLCBuYS5ybSA9IFQpDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR0dXJuLmFuZ2xlW0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSI1LjkiXSwgbmEucm0gPSBUKQ0KbGluZXMoa2Q0LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQprZDUgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkdHVybi5hbmdsZVtDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iOC45Il0sIG5hLnJtID0gVCkNCmxpbmVzKGtkNSwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiRmxvdyByYXRlICAwIiwgIkZsb3cgcmF0ZSAwLjYiLCAiRmxvdyByYXRlIDMiLCAiRmxvdyByYXRlIDUuOSIsICJGbG93IHJhdGUgOC45IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodCBibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ2hsb3JvcGh5bGwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpsZXZlbHMoQ0MuVG90YWxEYXRhJENobG9yb3BoeWxsKQ0KDQprZDEgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkdHVybi5hbmdsZVtDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGw9PSJObyBDaGxvcm9waHlsbCJdLCBuYS5ybT0gVCkNCnBsb3Qoa2QxLCB4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDMwKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZXMgVnMgQ2hsb3JvcGh5bGwsIExpZ2h0cyBPbiIpDQoNCmtkMiA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR0dXJuLmFuZ2xlW0NDLlRvdGFsRGF0YSRDaGxvcm9waHlsbD09IkxvdyBDaGxvcm9waHlsbCJdLCBuYS5ybT0gVCkNCmxpbmVzKGtkMiwgY29sPSdsaWdodGdyZWVuJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR0dXJuLmFuZ2xlW0NDLlRvdGFsRGF0YSRDaGxvcm9waHlsbD09Ik1lZGl1bSBDaGxvcm9waHlsbCJdLCBuYS5ybT0gVCkNCmxpbmVzKGtkMywgY29sPSdncmVlbicsIGx3ZD0yKQ0KDQprZDQgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkdHVybi5hbmdsZVtDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGw9PSJIaWdoIENobG9yb3BoeWxsIl0sIG5hLnJtPSBUKQ0KbGluZXMoa2Q0LCBjb2w9J2RhcmtncmVlbicsIGx3ZD0yKQ0KDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIk5vIENobG9yb3BoeWxsIiwgIkxvdyBDaGxvcm9waHlsbCIsICJNZWRpdW0gQ2hsb3JvcGh5bGwiLCAiSGlnaCBDaGxvcm9waHlsbCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHRncmVlbiIsICJncmVlbiIsICJkYXJrZ3JlZW4iKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHdWFubyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkR3Vhbm8pDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR0dXJuLmFuZ2xlW0NDLlRvdGFsRGF0YSRHdWFubz09IlByZXNlbnQiXSwgbmEucm0gPSBUKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMzApLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBHdWFubywgTGlnaHRzIE9uIikNCg0Ka2QyIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGVbQ0MuVG90YWxEYXRhJEd1YW5vPT0iQWJzZW50Il0sIG5hLnJtID0gVCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiR3Vhbm8gUHJlc2VudCIsICJHdWFubyBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIExpZ2h0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGV2ZWxzKENDLlRvdGFsRGF0YSRMaWdodCkNCg0Ka2QxIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGVbQ0MuVG90YWxEYXRhJExpZ2h0PT0iUHJlc2VudCJdLCBuYS5ybSA9IFQpDQpwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAzMCksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIExpZ2h0IikNCg0Ka2QyIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGVbQ0MuVG90YWxEYXRhJExpZ2h0PT0iQWJzZW50Il0sIG5hLnJtID0gVCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCmBgYA0KDQpOb3cgbG9va2luZyBhdCB2ZWxvY2l0eSBpbiByZWxhdGlvbiB0byBmbG93IGluc3RlYWQuLi4uDQoNCmBgYHtyfQ0KIyMjIEtlcm5lbCBkZW5zaXR5IHBsb3RzICMjIyMjIyMjIyMjIyMjIyMjIyMgU3dpbW1pbmcgdmVsb2NpdHkNCiMjcmFuZ2UoQ0MuVG90YWxEYXRhJHZlbC5mbG93KQ0KIyMgcGxvdChsb2cudmVsLmZsb3cpDQojI2xvZy52ZWwuZmxvdyA8LSBsb2cxMChDQy5Ub3RhbERhdGEkdmVsLmZsb3dbQ0MuVG90YWxEYXRhJHZlbC5mbG93ID4gMF0pDQojc3RyKENDLlRvdGFsRGF0YSkNCiMgIHZlbHMgPC0gKENDLlRvdGFsRGF0YSR2W0NDLlRvdGFsRGF0YSREX1ZfVD09aW5kW2ldXSkgICMjIHZlbHMgPC0gbG9nMTAodmVsc1t2ZWxzPjBdKSAgIyMgZnJvbSBub3RlYm9vazAxLCBjb3VsZCBiZSB1c2VmdWwgdG8gdHJ5IHRoaXMgaW5zdGVhZA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRmxvdyBSYXRlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGV2ZWxzKENDLlRvdGFsRGF0YSRGbG93LnJhdGUpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMiwyKSkNCg0KDQprZDEgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkdmVsLmZsb3dbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjAiXSwgbmEucm0gPSBUKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xNSwyMiksIHlsaW0gPSBjKDAsIDE3MCksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChpbiByZWxhdGlvbiB0byBmbG93LCBub3QgbG9nZ2VkKSBWcyBGbG93IFJhdGUsIExpZ2h0cyBPbiIpDQoNCmtkMiA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR2ZWwuZmxvd1tDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iMC42Il0sIG5hLnJtID0gVCkNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR2ZWwuZmxvd1tDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iMyJdLCBuYS5ybSA9IFQpDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR2ZWwuZmxvd1tDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iNS45Il0sIG5hLnJtID0gVCkNCmxpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0Ka2Q1IDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHZlbC5mbG93W0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSI4LjkiXSwgbmEucm0gPSBUKQ0KbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDaGxvcm9waHlsbCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGwpDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR2ZWwuZmxvd1tDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGw9PSJObyBDaGxvcm9waHlsbCJdLCBuYS5ybSA9IFQpDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE1LDIyKSwgeWxpbSA9IGMoMCwgMTcwKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKGluIHJlbGF0aW9uIHRvIGZsb3csIG5vdCBsb2dnZWQpIFZzIENobG9yb3BoeWxsLCBMaWdodHMgT24iKQ0KDQprZDIgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkdmVsLmZsb3dbQ0MuVG90YWxEYXRhJENobG9yb3BoeWxsPT0iTG93IENobG9yb3BoeWxsIl0sIG5hLnJtID0gVCkNCmxpbmVzKGtkMiwgY29sPSdsaWdodGdyZWVuJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR2ZWwuZmxvd1tDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGw9PSJNZWRpdW0gQ2hsb3JvcGh5bGwiXSwgbmEucm0gPSBUKQ0KbGluZXMoa2QzLCBjb2w9J2dyZWVuJywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR2ZWwuZmxvd1tDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGw9PSJIaWdoICBDaGxvcm9waHlsbCJdLCBuYS5ybSA9IFQpDQpsaW5lcyhrZDQsIGNvbD0nZGFya2dyZWVuJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIk5vIENobG9yb3BoeWxsIiwgIkxvdyBDaGxvcm9waHlsbCIsICJNZWRpdW0gQ2hsb3JvcGh5bGwiLCAiSGlnaCBDaGxvcm9waHlsbCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHRncmVlbiIsICJncmVlbiIsICJkYXJrZ3JlZW4iKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHdWFubyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkR3Vhbm8pDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR2ZWwuZmxvd1tDQy5Ub3RhbERhdGEkR3Vhbm89PSJQcmVzZW50Il0sIG5hLnJtID0gVCkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTUsMjIpLCB5bGltID0gYygwLCA2KSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKGluIHJlbGF0aW9uIHRvIGZsb3csIG5vdCBsb2dnZWQpIFZzIEd1YW5vLCBMaWdodHMgT24iKQ0KDQprZDIgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkdmVsLmZsb3dbQ0MuVG90YWxEYXRhJEd1YW5vPT0iQWJzZW50Il0sIG5hLnJtID0gVCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiR3Vhbm8gUHJlc2VudCIsICJHdWFubyBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIExpZ2h0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGV2ZWxzKENDLlRvdGFsRGF0YSRMaWdodCkNCg0Ka2QxIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHZlbC5mbG93W0NDLlRvdGFsRGF0YSRMaWdodD09IlByZXNlbnQiXSwgbmEucm0gPSBUKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xNSwyMiksIHlsaW0gPSBjKDAsIDE4MCksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChpbiByZWxhdGlvbiB0byBmbG93LCBub3QgbG9nZ2VkKSBWcyBMaWdodCIpDQoNCmtkMiA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSR2ZWwuZmxvd1tDQy5Ub3RhbERhdGEkTGlnaHQ9PSJBYnNlbnQiXSwgbmEucm0gPSBUKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KYGBgDQoNCk5vdyBmb3IgaGVhZGluZ3MuLi4uLg0KDQpgYGB7cn0NCiMjIHVzZSBDQy5Ub3RhbERhdCRoZWFkaW5nLnBpDQoNCnJtKGtkMSwga2QyLCBrZDMsIGtkNCwga2Q1KQ0KDQoNCiMjIyBLZXJuZWwgZGVuc2l0eSBwbG90cyAjIyMjIyMjIyMjIyMjIyMjIyMjIEhlYWRpbmdzDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMiwyKSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRmxvdyBSYXRlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGV2ZWxzKENDLlRvdGFsRGF0YSRGbG93LnJhdGUpDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRoZWFkaW5nLnBpW0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSIwIl0sIG5hLnJtPVQpDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAzKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZyBWcyBGbG93IFJhdGUsIExpZ2h0cyBPbiIpDQoNCmtkMiA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRoZWFkaW5nLnBpW0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSIwLjYiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRoZWFkaW5nLnBpW0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSIzIl0sIG5hLnJtPVQpDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRoZWFkaW5nLnBpW0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSI1LjkiXSwgbmEucm09VCkNCmxpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0Ka2Q1IDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJGhlYWRpbmcucGlbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjguOSJdLCBuYS5ybT1UKQ0KbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDaGxvcm9waHlsbCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGwpDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRoZWFkaW5nLnBpW0NDLlRvdGFsRGF0YSRDaGxvcm9waHlsbD09Ik5vIENobG9yb3BoeWxsIl0sIG5hLnJtPVQpDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAzKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZyBWcyBDaGxvcm9waHlsbCwgTGlnaHRzIE9uIikNCg0Ka2QyIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJGhlYWRpbmcucGlbQ0MuVG90YWxEYXRhJENobG9yb3BoeWxsPT0iTG93IENobG9yb3BoeWxsIl0sIG5hLnJtPVQpDQpsaW5lcyhrZDIsIGNvbD0nbGlnaHRncmVlbicsIGx3ZD0yKQ0KDQprZDMgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkaGVhZGluZy5waVtDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGw9PSJNZWRpdW0gQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCmxpbmVzKGtkMywgY29sPSdncmVlbicsIGx3ZD0yKQ0KDQprZDQgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkaGVhZGluZy5waVtDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGw9PSJIaWdoIENobG9yb3BoeWxsIl0sIG5hLnJtPVQpDQpsaW5lcyhrZDQsIGNvbD0nZGFya2dyZWVuJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIk5vIENobG9yb3BoeWxsIiwgIkxvdyBDaGxvcm9waHlsbCIsICJNZWRpdW0gQ2hsb3JvcGh5bGwiLCAiSGlnaCBDaGxvcm9waHlsbCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHRncmVlbiIsICJncmVlbiIsICJkYXJrZ3JlZW4iKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHdWFubyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkR3Vhbm8pDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRoZWFkaW5nLnBpW0NDLlRvdGFsRGF0YSRHdWFubz09IlByZXNlbnQiXSwgbmEucm09VCkNCnBsb3Qoa2QxLCAgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAzKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZyBWcyBHdWFubywgTGlnaHRzIE9uIikNCg0Ka2QyIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJGhlYWRpbmcucGlbQ0MuVG90YWxEYXRhJEd1YW5vPT0iQWJzZW50Il0sIG5hLnJtPVQpDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkd1YW5vIFByZXNlbnQiLCAiR3Vhbm8gQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBMaWdodCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkTGlnaHQpDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRoZWFkaW5nLnBpW0NDLlRvdGFsRGF0YSRMaWdodD09IlByZXNlbnQiXSwgbmEucm09VCkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDQpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5nIFZzIExpZ2h0IikNCg0Ka2QyIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJGhlYWRpbmcucGlbQ0MuVG90YWxEYXRhJExpZ2h0PT0iQWJzZW50Il0sIG5hLnJtPVQpDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQpgYGANCg0KTm93IGZvciBwaXRjaC4uLi4NCg0KYGBge3J9DQojI1VzZSBDQy5Ub3RhbERhdGEkcGl0Y2gucGVyZmVjdA0KaGVhZChDQy5Ub3RhbERhdGEpDQoNCiMjIyBLZXJuZWwgZGVuc2l0eSBwbG90cyAjIyMjIyMjIyMjIyMjIyMjIyMjIFBpdGNoDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMiwyKSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRmxvdyBSYXRlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGV2ZWxzKENDLlRvdGFsRGF0YSRGbG93LnJhdGUpDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRwaXRjaC5wZXJmZWN0W0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSIwIl0sIG5hLnJtPVQpDQpwbG90KGtkMSwgeGxpbSA9IGMoLTkwLDkwKSwgeWxpbSA9IGMoMCwgMC4xKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiUGl0Y2ggVnMgRmxvdyBSYXRlIikNCg0Ka2QyIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHBpdGNoLnBlcmZlY3RbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjAuNiJdLCBuYS5ybT1UKQ0KbGluZXMoa2QyLCBjb2w9J2xpZ2h0IGJsdWUnLCBsd2Q9MikNCg0Ka2QzIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHBpdGNoLnBlcmZlY3RbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjMiXSwgbmEucm09VCkNCmxpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0Ka2Q0IDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHBpdGNoLnBlcmZlY3RbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjUuOSJdLCBuYS5ybT1UKQ0KbGluZXMoa2Q0LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQprZDUgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkcGl0Y2gucGVyZmVjdFtDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iOC45Il0sIG5hLnJtPVQpDQpsaW5lcyhrZDUsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkZsb3cgcmF0ZSAgMCIsICJGbG93IHJhdGUgMC42IiwgIkZsb3cgcmF0ZSAzIiwgIkZsb3cgcmF0ZSA1LjkiLCAiRmxvdyByYXRlIDguOSIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENobG9yb3BoeWxsICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGV2ZWxzKENDLlRvdGFsRGF0YSRDaGxvcm9waHlsbCkNCg0Ka2QxIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHBpdGNoLnBlcmZlY3RbQ0MuVG90YWxEYXRhJENobG9yb3BoeWxsPT0iTm8gQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCnBsb3Qoa2QxLCB4bGltID0gYygtOTAsOTApLCB5bGltID0gYygwLCAwLjEpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJQaXRjaCBWcyBDaGxvcm9waHlsbCIpDQoNCmtkMiA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRwaXRjaC5wZXJmZWN0W0NDLlRvdGFsRGF0YSRDaGxvcm9waHlsbD09IkxvdyBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KbGluZXMoa2QyLCBjb2w9J2xpZ2h0Z3JlZW4nLCBsd2Q9MikNCg0Ka2QzIDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHBpdGNoLnBlcmZlY3RbQ0MuVG90YWxEYXRhJENobG9yb3BoeWxsPT0iTWVkaXVtIENobG9yb3BoeWxsIl0sIG5hLnJtPVQpDQpsaW5lcyhrZDMsIGNvbD0nZ3JlZW4nLCBsd2Q9MikNCg0Ka2Q0IDwtIGRlbnNpdHkoQ0MuVG90YWxEYXRhJHBpdGNoLnBlcmZlY3RbQ0MuVG90YWxEYXRhJENobG9yb3BoeWxsPT0iSGlnaCBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KbGluZXMoa2Q0LCBjb2w9J2RhcmtncmVlbicsIGx3ZD0yKQ0KDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIk5vIENobG9yb3BoeWxsIiwgIkxvdyBDaGxvcm9waHlsbCIsICJNZWRpdW0gQ2hsb3JvcGh5bGwiLCAiSGlnaCBDaGxvcm9waHlsbCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHRncmVlbiIsICJncmVlbiIsICJkYXJrZ3JlZW4iKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHdWFubyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkR3Vhbm8pDQoNCmtkMSA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRwaXRjaC5wZXJmZWN0W0NDLlRvdGFsRGF0YSRHdWFubz09IlByZXNlbnQiXSwgbmEucm09VCkNCnBsb3Qoa2QxLCB4bGltID0gYygtOTAsOTApLCB5bGltID0gYygwLCAwLjEpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJQaXRjaCBWcyBHdWFubyIpDQoNCmtkMiA8LSBkZW5zaXR5KENDLlRvdGFsRGF0YSRwaXRjaC5wZXJmZWN0W0NDLlRvdGFsRGF0YSRHdWFubz09IkFic2VudCJdLCBuYS5ybT1UKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJHdWFubyBQcmVzZW50IiwgIkd1YW5vIEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTGlnaHQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpsZXZlbHMoQ0MuVG90YWxEYXRhJExpZ2h0KQ0KDQprZDEgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkcGl0Y2gucGVyZmVjdFtDQy5Ub3RhbERhdGEkTGlnaHQ9PSJQcmVzZW50Il0sIG5hLnJtPVQpDQpwbG90KGtkMSwgeGxpbSA9IGMoLTkwLDkwKSwgeWxpbSA9IGMoMCwgMC4xKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiUGl0Y2ggVnMgTGlnaHQiKQ0KDQprZDIgPC0gZGVuc2l0eShDQy5Ub3RhbERhdGEkcGl0Y2gucGVyZmVjdFtDQy5Ub3RhbERhdGEkTGlnaHQ9PSJBYnNlbnQiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCmBgYA0KDQpGb3IgZWFjaCBsZXZlbCBvZiBGbG93DQoNCmBgYHtyfQ0KIyNGb3IgZmxvdyA9IDANCmYwIDwtIENDLlRvdGFsRGF0YVtDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iMCIsXQ0KZi42IDwtIENDLlRvdGFsRGF0YVtDQy5Ub3RhbERhdGEkRmxvdy5yYXRlPT0iMC42IixdDQpmMyA8LSBDQy5Ub3RhbERhdGFbQ0MuVG90YWxEYXRhJEZsb3cucmF0ZT09IjMiLF0NCmY1LjkgPC0gQ0MuVG90YWxEYXRhW0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSI1LjkiLF0NCmY4LjkgPC0gQ0MuVG90YWxEYXRhW0NDLlRvdGFsRGF0YSRGbG93LnJhdGU9PSI4LjkiLF0NCg0KDQojIyMgS2VybmVsIGRlbnNpdHkgcGxvdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyBUdXJuIEFuZ2xlcw0KcGFyKG1hcj0gYyg0LDQsMiwxKSkNCnBhcihtZnJvdz1jKDMsMikpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENobG9yb3BoeWxsICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGV2ZWxzKGYwJENobG9yb3BoeWxsKQ0KDQojI0Zsb3cgPSAwDQoNCmtkMSA8LSBkZW5zaXR5KGYwJHR1cm4uYW5nbGVbZjAkQ2hsb3JvcGh5bGw9PSJObyBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMyksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIENobG9yb3BoeWxsLCBGbG93ID0gMCIpDQoNCmtkMiA8LSBkZW5zaXR5KGYwJHR1cm4uYW5nbGVbZjAkQ2hsb3JvcGh5bGw9PSJMb3cgQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdsaWdodGdyZWVuJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KGYwJHR1cm4uYW5nbGVbZjAkQ2hsb3JvcGh5bGw9PSJNZWRpdW0gQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCmxpbmVzKGtkMywgY29sPSdncmVlbicsIGx3ZD0yKQ0KDQprZDQgPC0gZGVuc2l0eShmMCR0dXJuLmFuZ2xlW2YwJENobG9yb3BoeWxsPT0iSGlnaCBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KbGluZXMoa2Q0LCBjb2w9J2RhcmtncmVlbicsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJObyBDaGxvcm9waHlsbCIsICJMb3cgQ2hsb3JvcGh5bGwiLCAiTWVkaXVtIENobG9yb3BoeWxsIiwgIkhpZ2ggQ2hsb3JvcGh5bGwiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0Z3JlZW4iLCAiZ3JlZW4iLCAiZGFya2dyZWVuIiksDQogICAgICAgbHR5ID0gMSkNCg0KIyNGbG93ID0gMC42DQoNCg0Ka2QxIDwtIGRlbnNpdHkoZi42JHR1cm4uYW5nbGVbZi42JENobG9yb3BoeWxsPT0iTm8gQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCnBsb3Qoa2QxLCB4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDMpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBDaGxvcm9waHlsbCwgRmxvdyA9IDAuNiIpDQoNCmtkMiA8LSBkZW5zaXR5KGYuNiR0dXJuLmFuZ2xlW2YuNiRDaGxvcm9waHlsbD09IkxvdyBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KbGluZXMoa2QyLCBjb2w9J2xpZ2h0Z3JlZW4nLCBsd2Q9MikNCg0Ka2QzIDwtIGRlbnNpdHkoZi42JHR1cm4uYW5nbGVbZi42JENobG9yb3BoeWxsPT0iTWVkaXVtIENobG9yb3BoeWxsIl0sIG5hLnJtPVQpDQpsaW5lcyhrZDMsIGNvbD0nZ3JlZW4nLCBsd2Q9MikNCg0Ka2Q0IDwtIGRlbnNpdHkoZi42JHR1cm4uYW5nbGVbZi42JENobG9yb3BoeWxsPT0iSGlnaCBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KbGluZXMoa2Q0LCBjb2w9J2RhcmtncmVlbicsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJObyBDaGxvcm9waHlsbCIsICJMb3cgQ2hsb3JvcGh5bGwiLCAiTWVkaXVtIENobG9yb3BoeWxsIiwgIkhpZ2ggQ2hsb3JvcGh5bGwiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0Z3JlZW4iLCAiZ3JlZW4iLCAiZGFya2dyZWVuIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQojI0Zsb3cgPSAzDQoNCmtkMSA8LSBkZW5zaXR5KGYzJHR1cm4uYW5nbGVbZjMkQ2hsb3JvcGh5bGw9PSJObyBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMyksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIENobG9yb3BoeWxsLCBGbG93ID0gMyIpDQoNCmtkMiA8LSBkZW5zaXR5KGYzJHR1cm4uYW5nbGVbZjMkQ2hsb3JvcGh5bGw9PSJMb3cgQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdsaWdodGdyZWVuJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KGYzJHR1cm4uYW5nbGVbZjMkQ2hsb3JvcGh5bGw9PSJNZWRpdW0gQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCmxpbmVzKGtkMywgY29sPSdncmVlbicsIGx3ZD0yKQ0KDQprZDQgPC0gZGVuc2l0eShmMyR0dXJuLmFuZ2xlW2YzJENobG9yb3BoeWxsPT0iSGlnaCBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KbGluZXMoa2Q0LCBjb2w9J2RhcmtncmVlbicsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJObyBDaGxvcm9waHlsbCIsICJMb3cgQ2hsb3JvcGh5bGwiLCAiTWVkaXVtIENobG9yb3BoeWxsIiwgIkhpZ2ggQ2hsb3JvcGh5bGwiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0Z3JlZW4iLCAiZ3JlZW4iLCAiZGFya2dyZWVuIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQojI0Zsb3cgPSA1LjkNCg0Ka2QxIDwtIGRlbnNpdHkoZjUuOSR0dXJuLmFuZ2xlW2Y1LjkkQ2hsb3JvcGh5bGw9PSJObyBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMyksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIENobG9yb3BoeWxsLCBGbG93ID0gNS45IikNCg0Ka2QyIDwtIGRlbnNpdHkoZjUuOSR0dXJuLmFuZ2xlW2Y1LjkkQ2hsb3JvcGh5bGw9PSJMb3cgQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdsaWdodGdyZWVuJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KGY1LjkkdHVybi5hbmdsZVtmNS45JENobG9yb3BoeWxsPT0iTWVkaXVtIENobG9yb3BoeWxsIl0sIG5hLnJtPVQpDQpsaW5lcyhrZDMsIGNvbD0nZ3JlZW4nLCBsd2Q9MikNCg0Ka2Q0IDwtIGRlbnNpdHkoZjUuOSR0dXJuLmFuZ2xlW2Y1LjkkQ2hsb3JvcGh5bGw9PSJIaWdoIENobG9yb3BoeWxsIl0sIG5hLnJtPVQpDQpsaW5lcyhrZDQsIGNvbD0nZGFya2dyZWVuJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIk5vIENobG9yb3BoeWxsIiwgIkxvdyBDaGxvcm9waHlsbCIsICJNZWRpdW0gQ2hsb3JvcGh5bGwiLCAiSGlnaCBDaGxvcm9waHlsbCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHRncmVlbiIsICJncmVlbiIsICJkYXJrZ3JlZW4iKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCiMjRmxvdyA9IDguOQ0KDQprZDEgPC0gZGVuc2l0eShmOC45JHR1cm4uYW5nbGVbZjguOSRDaGxvcm9waHlsbD09Ik5vIENobG9yb3BoeWxsIl0sIG5hLnJtPVQpDQpwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjA0KSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZXMgVnMgQ2hsb3JvcGh5bGwsIEZsb3cgPSA4LjkiKQ0KDQprZDIgPC0gZGVuc2l0eShmOC45JHR1cm4uYW5nbGVbZjguOSRDaGxvcm9waHlsbD09IkxvdyBDaGxvcm9waHlsbCJdLCBuYS5ybT1UKQ0KbGluZXMoa2QyLCBjb2w9J2xpZ2h0Z3JlZW4nLCBsd2Q9MikNCg0Ka2QzIDwtIGRlbnNpdHkoZjguOSR0dXJuLmFuZ2xlW2Y4LjkkQ2hsb3JvcGh5bGw9PSJNZWRpdW0gQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCmxpbmVzKGtkMywgY29sPSdncmVlbicsIGx3ZD0yKQ0KDQprZDQgPC0gZGVuc2l0eShmOC45JHR1cm4uYW5nbGVbZjguOSRDaGxvcm9waHlsbD09IkhpZ2ggQ2hsb3JvcGh5bGwiXSwgbmEucm09VCkNCmxpbmVzKGtkNCwgY29sPSdkYXJrZ3JlZW4nLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTm8gQ2hsb3JvcGh5bGwiLCAiTG93IENobG9yb3BoeWxsIiwgIk1lZGl1bSBDaGxvcm9waHlsbCIsICJIaWdoIENobG9yb3BoeWxsIiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodGdyZWVuIiwgImdyZWVuIiwgImRhcmtncmVlbiIpLA0KICAgICAgIGx0eSA9IDEpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR3Vhbm8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnBhcihtYXI9IGMoNCw0LDIsMSkpDQpwYXIobWZyb3c9YygzLDIpKQ0KDQojI0Zsb3cgPSAwDQoNCmtkMSA8LSBkZW5zaXR5KGYwJHR1cm4uYW5nbGVbZjAkR3Vhbm89PSJQcmVzZW50Il0sIG5hLnJtPVQpDQpwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZXMgVnMgR3Vhbm8sIEZsb3cgPSAwIikNCg0Ka2QyIDwtIGRlbnNpdHkoZjAkdHVybi5hbmdsZVtmMCRHdWFubz09IkFic2VudCJdLCBuYS5ybT1UKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJHdWFubyBQcmVzZW50IiwgIkd1YW5vIEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KIyNGbG93ID0gMC42DQoNCmtkMSA8LSBkZW5zaXR5KGYuNiR0dXJuLmFuZ2xlW2YuNiRHdWFubz09IlByZXNlbnQiXSwgbmEucm09VCkNCnBsb3Qoa2QxLCB4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBHdWFubywgRmxvdyA9IDAuNiIpDQoNCmtkMiA8LSBkZW5zaXR5KGYuNiR0dXJuLmFuZ2xlW2YuNiRHdWFubz09IkFic2VudCJdLCBuYS5ybT1UKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJHdWFubyBQcmVzZW50IiwgIkd1YW5vIEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KIyNGbG93ID0gMw0KDQprZDEgPC0gZGVuc2l0eShmMyR0dXJuLmFuZ2xlW2YzJEd1YW5vPT0iUHJlc2VudCJdLCBuYS5ybT1UKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMyksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIEd1YW5vLCBGbG93ID0gMyIpDQoNCmtkMiA8LSBkZW5zaXR5KGYzJHR1cm4uYW5nbGVbZjMkR3Vhbm89PSJBYnNlbnQiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJHdWFubyBQcmVzZW50IiwgIkd1YW5vIEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KIyNGbG93ID0gNS45DQoNCmtkMSA8LSBkZW5zaXR5KGY1LjkkdHVybi5hbmdsZVtmNS45JEd1YW5vPT0iUHJlc2VudCJdLCBuYS5ybT1UKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMyksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIEd1YW5vLCBGbG93ID0gNS45IikNCg0Ka2QyIDwtIGRlbnNpdHkoZjUuOSR0dXJuLmFuZ2xlW2Y1LjkkR3Vhbm89PSJBYnNlbnQiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiR3Vhbm8gUHJlc2VudCIsICJHdWFubyBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCiMjRmxvdyA9IDguOQ0KDQprZDEgPC0gZGVuc2l0eShmOC45JHR1cm4uYW5nbGVbZjguOSRHdWFubz09IlByZXNlbnQiXSwgbmEucm09VCkNCnBsb3Qoa2QxLCB4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDMpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBHdWFubywgRmxvdyA9IDguOSIpDQoNCmtkMiA8LSBkZW5zaXR5KGY4LjkkdHVybi5hbmdsZVtmOC45JEd1YW5vPT0iQWJzZW50Il0sIG5hLnJtPVQpDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkd1YW5vIFByZXNlbnQiLCAiR3Vhbm8gQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTGlnaHQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCg0KcGFyKG1hcj0gYyg0LDQsMiwxKSkNCnBhcihtZnJvdz1jKDMsMikpDQpsZXZlbHMoQ0MuVG90YWxEYXRhJExpZ2h0KQ0KDQprZDEgPC0gZGVuc2l0eShmMCR0dXJuLmFuZ2xlW2YwJExpZ2h0PT0iUHJlc2VudCJdLCBuYS5ybT1UKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIExpZ2h0LCBGbG93ID0gMCIpDQoNCmtkMiA8LSBkZW5zaXR5KGYwJHR1cm4uYW5nbGVbZjAkTGlnaHQ9PSJBYnNlbnQiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShmLjYkdHVybi5hbmdsZVtmLjYkTGlnaHQ9PSJQcmVzZW50Il0sIG5hLnJtPVQpDQpwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZXMgVnMgTGlnaHQsIEZsb3cgPSAwLjYiKQ0KDQprZDIgPC0gZGVuc2l0eShmLjYkdHVybi5hbmdsZVtmLjYkTGlnaHQ9PSJBYnNlbnQiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShmMyR0dXJuLmFuZ2xlW2YzJExpZ2h0PT0iUHJlc2VudCJdLCBuYS5ybT1UKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIExpZ2h0LCBGbG93ID0gMyIpDQoNCmtkMiA8LSBkZW5zaXR5KGYzJHR1cm4uYW5nbGVbZjMkTGlnaHQ9PSJBYnNlbnQiXSwgbmEucm09VCkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShmNS45JHR1cm4uYW5nbGVbZjUuOSRMaWdodD09IlByZXNlbnQiXSwgbmEucm09VCkNCnBsb3Qoa2QxLCB4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBMaWdodCwgRmxvdyA9IDUuOSIpDQoNCmtkMiA8LSBkZW5zaXR5KGY1LjkkdHVybi5hbmdsZVtmNS45JExpZ2h0PT0iQWJzZW50Il0sIG5hLnJtPVQpDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoZjguOSR0dXJuLmFuZ2xlW2Y4LjkkTGlnaHQ9PSJQcmVzZW50Il0sIG5hLnJtPVQpDQpwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZXMgVnMgTGlnaHQsIEZsb3cgPSA4LjkiKQ0KDQprZDIgPC0gZGVuc2l0eShmOC45JHR1cm4uYW5nbGVbZjguOSRMaWdodD09IkFic2VudCJdLCBuYS5ybT1UKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KYGBgDQoNCkZvciBlYWNoIGxldmVsIG9mIENobG9yb3BoeWxsDQoNCmBgYHtyfQ0KDQojIyMgS2VybmVsIGRlbnNpdHkgcGxvdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyBUdXJuIEFuZ2xlcw0KcGFyKG1hcj0gYyg0LDQsMiwxKSkNCnBhcihtZnJvdz1jKDMsMykpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZsb3cgUmF0ZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkRmxvdy5yYXRlKQ0KDQprZDEgPC0gZGVuc2l0eShDaGxBMCR0dXJuLmFuZ2xlW0NobEEwJEZsb3cucmF0ZT09IjAiXSkNCnBsb3Qoa2QxLCB4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlIFZzIEZsb3cgUmF0ZSwgQ2hsb3JvcGh5bGwgPSAwIikNCg0Ka2QyIDwtIGRlbnNpdHkoQ2hsQTAkdHVybi5hbmdsZVtDaGxBMCRGbG93LnJhdGU9PSIwLjYiXSkNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KENobEEwJHR1cm4uYW5nbGVbQ2hsQTAkRmxvdy5yYXRlPT0iMyJdKQ0KbGluZXMoa2QzLCBjb2w9J3llbGxvdycsIGx3ZD0yKQ0KDQprZDQgPC0gZGVuc2l0eShDaGxBMCR0dXJuLmFuZ2xlW0NobEEwJEZsb3cucmF0ZT09IjUuOSJdKQ0KbGluZXMoa2Q0LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQprZDUgPC0gZGVuc2l0eShDaGxBMCR0dXJuLmFuZ2xlW0NobEEwJEZsb3cucmF0ZT09IjguOSJdKQ0KbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0KDQojI2tkMSA8LSBkZW5zaXR5KENobEE0LjMkdHVybi5hbmdsZVtDaGxBNC4zJEZsb3cucmF0ZT09IjAiXSkNCiMjcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGUgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDQuMyIpDQoNCmtkMiA8LSBkZW5zaXR5KENobEE0LjMkdHVybi5hbmdsZVtDaGxBNC4zJEZsb3cucmF0ZT09IjAuNiJdKQ0KcGxvdChrZDIsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGUgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDQuMyIpDQojI2xpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoQ2hsQTQuMyR0dXJuLmFuZ2xlW0NobEE0LjMkRmxvdy5yYXRlPT0iMyJdKQ0KIyNsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCiMja2Q0IDwtIGRlbnNpdHkoQ2hsQTQuMyR0dXJuLmFuZ2xlW0NobEE0LjMkRmxvdy5yYXRlPT0iNS45Il0pDQojI2xpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDUgPC0gZGVuc2l0eShDaGxBNC4zJHR1cm4uYW5nbGVbQ2hsQTQuMyRGbG93LnJhdGU9PSI4LjkiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTQuNiR0dXJuLmFuZ2xlW0NobEE0LjYkRmxvdy5yYXRlPT0iMCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGUgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDQuNiIpDQoNCmtkMiA8LSBkZW5zaXR5KENobEE0LjYkdHVybi5hbmdsZVtDaGxBNC42JEZsb3cucmF0ZT09IjAuNiJdKQ0KIyNwbG90KGtkMiwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdsaWdodCBibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZSBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gNC42IikNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoQ2hsQTQuNiR0dXJuLmFuZ2xlW0NobEE0LjYkRmxvdy5yYXRlPT0iMyJdKQ0KIyNsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCiMja2Q0IDwtIGRlbnNpdHkoQ2hsQTQuNiR0dXJuLmFuZ2xlW0NobEE0LjYkRmxvdy5yYXRlPT0iNS45Il0pDQojI2xpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDUgPC0gZGVuc2l0eShDaGxBNC42JHR1cm4uYW5nbGVbQ2hsQTQuNiRGbG93LnJhdGU9PSI4LjkiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTUuNSR0dXJuLmFuZ2xlW0NobEE1LjUkRmxvdy5yYXRlPT0iMCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGUgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDUuNSIpDQoNCiMja2QyIDwtIGRlbnNpdHkoQ2hsQTUuNSR0dXJuLmFuZ2xlW0NobEE1LjUkRmxvdy5yYXRlPT0iMC42Il0pDQojI2xpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoQ2hsQTUuNSR0dXJuLmFuZ2xlW0NobEE1LjUkRmxvdy5yYXRlPT0iMyJdKQ0KIyNsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCiMja2Q0IDwtIGRlbnNpdHkoQ2hsQTUuNSR0dXJuLmFuZ2xlW0NobEE1LjUkRmxvdy5yYXRlPT0iNS45Il0pDQojI2xpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDUgPC0gZGVuc2l0eShDaGxBNS41JHR1cm4uYW5nbGVbQ2hsQTUuNSRGbG93LnJhdGU9PSI4LjkiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0KIyNrZDEgPC0gZGVuc2l0eShDaGxBNiR0dXJuLmFuZ2xlW0NobEE2JEZsb3cucmF0ZT09IjAiXSkNCiMjcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGUgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDYiKQ0KDQprZDIgPC0gZGVuc2l0eShDaGxBNiR0dXJuLmFuZ2xlW0NobEE2JEZsb3cucmF0ZT09IjAuNiJdKQ0KcGxvdChrZDIsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGUgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDYiKQ0KIyNsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQojI2tkMyA8LSBkZW5zaXR5KENobEE2JHR1cm4uYW5nbGVbQ2hsQTYkRmxvdy5yYXRlPT0iMyJdKQ0KIyNsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCiMja2Q0IDwtIGRlbnNpdHkoQ2hsQTYkdHVybi5hbmdsZVtDaGxBNiRGbG93LnJhdGU9PSI1LjkiXSkNCiMjbGluZXMoa2Q0LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQojI2tkNSA8LSBkZW5zaXR5KENobEE2JHR1cm4uYW5nbGVbQ2hsQTYkRmxvdy5yYXRlPT0iOC45Il0pDQojI2xpbmVzKGtkNSwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiRmxvdyByYXRlICAwIiwgIkZsb3cgcmF0ZSAwLjYiLCAiRmxvdyByYXRlIDMiLCAiRmxvdyByYXRlIDUuOSIsICJGbG93IHJhdGUgOC45IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodCBibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCmtkMSA8LSBkZW5zaXR5KENobEE3JHR1cm4uYW5nbGVbQ2hsQTckRmxvdy5yYXRlPT0iMCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGUgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDciKQ0KDQojI2tkMiA8LSBkZW5zaXR5KENobEE3JHR1cm4uYW5nbGVbQ2hsQTckRmxvdy5yYXRlPT0iMC42Il0pDQojI2xpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoQ2hsQTckdHVybi5hbmdsZVtDaGxBNyRGbG93LnJhdGU9PSIzIl0pDQojI2xpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShDaGxBNyR0dXJuLmFuZ2xlW0NobEE3JEZsb3cucmF0ZT09IjUuOSJdKQ0KIyNsaW5lcyhrZDQsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCiMja2Q1IDwtIGRlbnNpdHkoQ2hsQTckdHVybi5hbmdsZVtDaGxBNyRGbG93LnJhdGU9PSI4LjkiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0KIyNrZDEgPC0gZGVuc2l0eShDaGxBMTMkdHVybi5hbmdsZVtDaGxBMTMkRmxvdy5yYXRlPT0iMCJdKQ0KIyNwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZSBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gMTMiKQ0KDQprZDIgPC0gZGVuc2l0eShDaGxBMTMkdHVybi5hbmdsZVtDaGxBMTMkRmxvdy5yYXRlPT0iMC42Il0pDQpwbG90KGtkMiwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdsaWdodCBibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZSBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gMTMiKQ0KIyNsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQojI2tkMyA8LSBkZW5zaXR5KENobEExMyR0dXJuLmFuZ2xlW0NobEExMyRGbG93LnJhdGU9PSIzIl0pDQojI2xpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShDaGxBMTMkdHVybi5hbmdsZVtDaGxBMTMkRmxvdy5yYXRlPT0iNS45Il0pDQojI2xpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDUgPC0gZGVuc2l0eShDaGxBMTMkdHVybi5hbmdsZVtDaGxBMTMkRmxvdy5yYXRlPT0iOC45Il0pDQojI2xpbmVzKGtkNSwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiRmxvdyByYXRlICAwIiwgIkZsb3cgcmF0ZSAwLjYiLCAiRmxvdyByYXRlIDMiLCAiRmxvdyByYXRlIDUuOSIsICJGbG93IHJhdGUgOC45IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodCBibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCmtkMSA8LSBkZW5zaXR5KENobEExOSR0dXJuLmFuZ2xlW0NobEExOSRGbG93LnJhdGU9PSIwIl0pDQpwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZSBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gMTkiKQ0KDQojI2tkMiA8LSBkZW5zaXR5KENobEExOSR0dXJuLmFuZ2xlW0NobEExOSRGbG93LnJhdGU9PSIwLjYiXSkNCiMjbGluZXMoa2QyLCBjb2w9J2xpZ2h0IGJsdWUnLCBsd2Q9MikNCg0KIyNrZDMgPC0gZGVuc2l0eShDaGxBMTkkdHVybi5hbmdsZVtDaGxBMTkkRmxvdy5yYXRlPT0iMyJdKQ0KIyNsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCiMja2Q0IDwtIGRlbnNpdHkoQ2hsQTE5JHR1cm4uYW5nbGVbQ2hsQTE5JEZsb3cucmF0ZT09IjUuOSJdKQ0KIyNsaW5lcyhrZDQsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCiMja2Q1IDwtIGRlbnNpdHkoQ2hsQTE5JHR1cm4uYW5nbGVbQ2hsQTE5JEZsb3cucmF0ZT09IjguOSJdKQ0KIyNsaW5lcyhrZDUsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkZsb3cgcmF0ZSAgMCIsICJGbG93IHJhdGUgMC42IiwgIkZsb3cgcmF0ZSAzIiwgIkZsb3cgcmF0ZSA1LjkiLCAiRmxvdyByYXRlIDguOSIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBMaWdodCAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnBhcihtYXI9IGMoNCw0LDIsMSkpDQpwYXIobWZyb3c9YygzLDMpKQ0KDQprZDEgPC0gZGVuc2l0eShDaGxBMCR0dXJuLmFuZ2xlW0NobEEwJExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEseGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDAiKQ0KDQprZDIgPC0gZGVuc2l0eShDaGxBMCR0dXJuLmFuZ2xlW0NobEEwJExpZ2h0PT0iQWJzZW50Il0pDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCmtkMSA8LSBkZW5zaXR5KENobEE0LjMkdHVybi5hbmdsZVtDaGxBNC4zJExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEseGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDQuMyIpDQoNCiMja2QyIDwtIGRlbnNpdHkoQ2hsQTQuMyR0dXJuLmFuZ2xlW0NobEE0LjMkTGlnaHQ9PSJBYnNlbnQiXSkNCiMjbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQprZDEgPC0gZGVuc2l0eShDaGxBNC42JHR1cm4uYW5nbGVbQ2hsQTQuNiRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMjUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBMaWdodCwgQ2hsb3JvcGh5bGwgPSA0LjYiKQ0KDQojI2tkMiA8LSBkZW5zaXR5KENobEE0LjYkdHVybi5hbmdsZVtDaGxBNC42JExpZ2h0PT0iQWJzZW50Il0pDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTUuNSR0dXJuLmFuZ2xlW0NobEE1LjUkTGlnaHQ9PSJQcmVzZW50Il0pDQpwbG90KGtkMSx4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDI1KSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVHVybiBBbmdsZXMgVnMgTGlnaHQsIENobG9yb3BoeWxsID0gNS41IikNCg0KIyNrZDIgPC0gZGVuc2l0eShDaGxBNS41JHR1cm4uYW5nbGVbQ2hsQTUuNSRMaWdodD09IkFic2VudCJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTYkdHVybi5hbmdsZVtDaGxBNiRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMjUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBMaWdodCwgQ2hsb3JvcGh5bGwgPSA2IikNCg0KIyNrZDIgPC0gZGVuc2l0eShDaGxBNiR0dXJuLmFuZ2xlW0NobEE2JExpZ2h0PT0iQWJzZW50Il0pDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTckdHVybi5hbmdsZVtDaGxBNyRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMjUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBMaWdodCwgQ2hsb3JvcGh5bGwgPSA3IikNCg0Ka2QyIDwtIGRlbnNpdHkoQ2hsQTckdHVybi5hbmdsZVtDaGxBNyRMaWdodD09IkFic2VudCJdKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCmtkMSA8LSBkZW5zaXR5KENobEExMyR0dXJuLmFuZ2xlW0NobEExMyRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMjUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJUdXJuIEFuZ2xlcyBWcyBMaWdodCwgQ2hsb3JvcGh5bGwgPSAxMyIpDQoNCiMja2QyIDwtIGRlbnNpdHkoQ2hsQTEzJHR1cm4uYW5nbGVbQ2hsQTEzJExpZ2h0PT0iQWJzZW50Il0pDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTE5JHR1cm4uYW5nbGVbQ2hsQTE5JExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEseGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlR1cm4gQW5nbGVzIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDE5IikNCg0Ka2QyIDwtIGRlbnNpdHkoQ2hsQTE5JHR1cm4uYW5nbGVbQ2hsQTE5JExpZ2h0PT0iQWJzZW50Il0pDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQpgYGANCg0KRm9yIGVhY2ggbGV2ZWwgb2YgRmxvdyAobm93IGZvciB2ZWxvY2l0eSkNCg0KYGBge3J9DQojIyMgS2VybmVsIGRlbnNpdHkgcGxvdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyBWZWxvY2l0eQ0KcGFyKG1hcj0gYyg0LDQsMiwxKSkNCnBhcihtZnJvdz1jKDEsMikpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENobG9yb3BoeWxsICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQprZDEgPC0gZGVuc2l0eShmMCR2ZWwuZmxvd1tmMCRDaGxvcm9waHlsbD09IjAiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMiwyKSwgeWxpbSA9IGMoMCwgMTUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobm90IGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgQ2hsb3JvcGh5bGwsIEZsb3cgPSAwIikNCg0Ka2QyIDwtIGRlbnNpdHkoZjAkdmVsLmZsb3dbZjAkQ2hsb3JvcGh5bGw9PSI0LjMiXSkNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJENobG9yb3BoeWxsPT0iNC42Il0pDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkOCA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJENobG9yb3BoeWxsPT0iNS41Il0pDQpsaW5lcyhrZDgsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJENobG9yb3BoeWxsPT0iNi4xIl0pDQpsaW5lcyhrZDQsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmtkNSA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJENobG9yb3BoeWxsPT0iNy42Il0pDQpsaW5lcyhrZDUsIGNvbD0nZGFyayByZWQnLCBsd2Q9MikNCg0Ka2Q2IDwtIGRlbnNpdHkoZjAkdmVsLmZsb3dbZjAkQ2hsb3JvcGh5bGw9PSIxMy41Il0pDQpsaW5lcyhrZDYsIGNvbD0ncHVycGxlJywgbHdkPTIpDQoNCmtkNyA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJENobG9yb3BoeWxsPT0iMTkiXSkNCmxpbmVzKGtkNywgY29sPSdibGFjaycsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJDaGxvcm9waHlsbCAgMCIsICJDaGxvcm9waHlsbCA0LjMiLCAiQ2hsb3JvcGh5bGwgNC42IiwgIkNobG9yb3BwaHlsbCA1LjUiLCAiQ2hsb3JvcGh5bGwgNi4xIiwgDQogICAgICAgICAgICAgICAgICAiQ2hsb3JvcGh5bGwgNy42IiwgIkNobG9yb3BoeWxsIDEzLjUiLCAnQ2hsb3JvcGh5bGwgMTknKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiLCAiZGFyayByZWQiLCAicHVycGxlIiwgImJsYWNrIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoZi42JHZlbC5mbG93W2YuNiRDaGxvcm9waHlsbD09IjAiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMiwyKSwgeWxpbSA9IGMoMCwgMTUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobm90IGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgQ2hsb3JvcGh5bGwsIEZsb3cgPSAwLjYiKQ0KDQprZDIgPC0gZGVuc2l0eShmLjYkdmVsLmZsb3dbZi42JENobG9yb3BoeWxsPT0iNC4zIl0pDQpsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQprZDMgPC0gZGVuc2l0eShmLjYkdmVsLmZsb3dbZi42JENobG9yb3BoeWxsPT0iNC42Il0pDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCiMja2Q4IDwtIGRlbnNpdHkoZi42JHZlbC5mbG93W2YuNiRDaGxvcm9waHlsbD09IjUuNSJdKQ0KIyNsaW5lcyhrZDgsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KGYuNiR2ZWwuZmxvd1tmLjYkQ2hsb3JvcGh5bGw9PSI2LjEiXSkNCmxpbmVzKGtkNCwgY29sPSdyZWQnLCBsd2Q9MikNCg0KIyNrZDUgPC0gZGVuc2l0eShmLjYkdmVsLmZsb3dbZi42JENobG9yb3BoeWxsPT0iNy42Il0pDQojI2xpbmVzKGtkNSwgY29sPSdkYXJrIHJlZCcsIGx3ZD0yKQ0KDQprZDYgPC0gZGVuc2l0eShmLjYkdmVsLmZsb3dbZi42JENobG9yb3BoeWxsPT0iMTMuNSJdKQ0KbGluZXMoa2Q2LCBjb2w9J3B1cnBsZScsIGx3ZD0yKQ0KDQojI2tkNyA8LSBkZW5zaXR5KGYuNiR2ZWwuZmxvd1tmLjYkQ2hsb3JvcGh5bGw9PSIxOSJdKQ0KIyNsaW5lcyhrZDcsIGNvbD0nYmxhY2snLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiQ2hsb3JvcGh5bGwgIDAiLCAiQ2hsb3JvcGh5bGwgNC4zIiwgIkNobG9yb3BoeWxsIDQuNiIsICJDaGxvcm9waHlsbCA1LjUiLCAiQ2hsb3JvcGh5bGwgNi4xIiwgDQogICAgICAgICAgICAgICAgICAiQ2hsb3JvcGh5bGwgNy42IiwgIkNobG9yb3BoeWxsIDEzLjUiLCAnQ2hsb3JvcGh5bGwgMTknKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiLCAiZGFyayByZWQiLCAicHVycGxlIiwgImJsYWNrIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCmtkMSA8LSBkZW5zaXR5KGYzJHZlbC5mbG93W2YzJENobG9yb3BoeWxsPT0iMCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xNSwxNSksIHlsaW0gPSBjKDAsIDIuNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChib3QgbG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBDaGxvcm9waHlsbCwgRmxvdyA9IDMiKQ0KDQojI2tkMiA8LSBkZW5zaXR5KGYzJHZlbC5mbG93W2YzJENobG9yb3BoeWxsPT0iNC4zIl0pDQojI2xpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoZjMkdmVsLmZsb3dbZjMkQ2hsb3JvcGh5bGw9PSI0LjYiXSkNCiMjbGluZXMoa2QzLCBjb2w9J3llbGxvdycsIGx3ZD0yKQ0KDQojI2tkOCA8LSBkZW5zaXR5KGYzJHZlbC5mbG93W2YzJENobG9yb3BoeWxsPT0iNS41Il0pDQojI2xpbmVzKGtkOCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShmMyR2ZWwuZmxvd1tmMyRDaGxvcm9waHlsbD09IjYuMSJdKQ0KIyNsaW5lcyhrZDQsIGNvbD0ncmVkJywgbHdkPTIpDQoNCiMja2Q1IDwtIGRlbnNpdHkoZjMkdmVsLmZsb3dbZjMkQ2hsb3JvcGh5bGw9PSI3LjYiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J2RhcmsgcmVkJywgbHdkPTIpDQoNCiMja2Q2IDwtIGRlbnNpdHkoZjMkdmVsLmZsb3dbZjMkQ2hsb3JvcGh5bGw9PSIxMy41Il0pDQojI2xpbmVzKGtkNiwgY29sPSdwdXJwbGUnLCBsd2Q9MikNCg0KIyNrZDcgPC0gZGVuc2l0eShmMyR2ZWwuZmxvd1tmMyRDaGxvcm9waHlsbD09IjE5Il0pDQojI2xpbmVzKGtkNywgY29sPSdibGFjaycsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJDaGxvcm9waHlsbCAgMCIsICJDaGxvcm9waHlsbCA0LjMiLCAiQ2hsb3JvcGh5bGwgNC42IiwgIkNobG9yb3BoeWxsIDUuNSIsICJDaGxvcm9waHlsbCA2LjEiLCANCiAgICAgICAgICAgICAgICAgICJDaGxvcm9waHlsbCA3LjYiLCAiQ2hsb3JvcGh5bGwgMTMuNSIsICdDaGxvcm9waHlsbCAxOScpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIsICJkYXJrIHJlZCIsICJwdXJwbGUiLCAiYmxhY2siKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoZjUkdmVsLmZsb3dbZjUkQ2hsb3JvcGh5bGw9PSIwIl0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE1LDE1KSwgeWxpbSA9IGMoMCwgMi41KSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKG5vdCBsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIENobG9yb3BoeWxsLCBGbG93ID0gNS45IikNCg0KIyNrZDIgPC0gZGVuc2l0eShmNSR2ZWwuZmxvd1tmNSRDaGxvcm9waHlsbD09IjQuMyJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQojI2tkMyA8LSBkZW5zaXR5KGY1JHZlbC5mbG93W2Y1JENobG9yb3BoeWxsPT0iNC42Il0pDQojI2xpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0KIyNrZDggPC0gZGVuc2l0eShmNSR2ZWwuZmxvd1tmNSRDaGxvcm9waHlsbD09IjUuNSJdKQ0KIyNsaW5lcyhrZDgsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCiMja2Q0IDwtIGRlbnNpdHkoZjUkdmVsLmZsb3dbZjUkQ2hsb3JvcGh5bGw9PSI2LjEiXSkNCiMjbGluZXMoa2Q0LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQojI2tkNSA8LSBkZW5zaXR5KGY1JHZlbC5mbG93W2Y1JENobG9yb3BoeWxsPT0iNy42Il0pDQojI2xpbmVzKGtkNSwgY29sPSdkYXJrIHJlZCcsIGx3ZD0yKQ0KDQojI2tkNiA8LSBkZW5zaXR5KGY1JHZlbC5mbG93W2Y1JENobG9yb3BoeWxsPT0iMTMuNSJdKQ0KIyNsaW5lcyhrZDYsIGNvbD0ncHVycGxlJywgbHdkPTIpDQoNCiMja2Q3IDwtIGRlbnNpdHkoZjUkdmVsLmZsb3dbZjUkQ2hsb3JvcGh5bGw9PSIxOSJdKQ0KIyNsaW5lcyhrZDcsIGNvbD0nYmxhY2snLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiQ2hsb3JvcGh5bGwgIDAiLCAiQ2hsb3JvcGh5bGwgNC4zIiwgIkNobG9yb3BoeWxsIDQuNiIsICJDaGxvcm9waHlsbCA1LjUiLCAiQ2hsb3JvcGh5bGwgNi4xIiwgDQogICAgICAgICAgICAgICAgICAiQ2hsb3JvcGh5bGwgNy42IiwgIkNobG9yb3BoeWxsIDEzLjUiLCAnQ2hsb3JvcGh5bGwgMTknKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiLCAiZGFyayByZWQiLCAicHVycGxlIiwgImJsYWNrIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCmtkMSA8LSBkZW5zaXR5KGY4JHZlbC5mbG93W2Y4JENobG9yb3BoeWxsPT0iMCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xNSwxNSksIHlsaW0gPSBjKDAsIDAuMjUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobm90IGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgQ2hsb3JvcGh5bGwsIEZsb3cgPSA4LjkiKQ0KDQojI2tkMiA8LSBkZW5zaXR5KGY4JHZlbC5mbG93W2Y4JENobG9yb3BoeWxsPT0iNC4zIl0pDQojI2xpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoZjgkdmVsLmZsb3dbZjgkQ2hsb3JvcGh5bGw9PSI0LjYiXSkNCiMjbGluZXMoa2QzLCBjb2w9J3llbGxvdycsIGx3ZD0yKQ0KDQojI2tkOCA8LSBkZW5zaXR5KGY4JHZlbC5mbG93W2Y4JENobG9yb3BoeWxsPT0iNS41Il0pDQojI2xpbmVzKGtkOCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShmOCR2ZWwuZmxvd1tmOCRDaGxvcm9waHlsbD09IjYuMSJdKQ0KIyNsaW5lcyhrZDQsIGNvbD0ncmVkJywgbHdkPTIpDQoNCiMja2Q1IDwtIGRlbnNpdHkoZjgkdmVsLmZsb3dbZjgkQ2hsb3JvcGh5bGw9PSI3LjYiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J2RhcmsgcmVkJywgbHdkPTIpDQoNCiMja2Q2IDwtIGRlbnNpdHkoZjgkdmVsLmZsb3dbZjgkQ2hsb3JvcGh5bGw9PSIxMy41Il0pDQojI2xpbmVzKGtkNiwgY29sPSdwdXJwbGUnLCBsd2Q9MikNCg0KIyNrZDcgPC0gZGVuc2l0eShmOCR2ZWwuZmxvd1tmOCRDaGxvcm9waHlsbD09IjE5Il0pDQojI2xpbmVzKGtkNywgY29sPSdibGFjaycsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJDaGxvcm9waHlsbCAgMCIsICJDaGxvcm9waHlsbCA0LjMiLCAiQ2hsb3JvcGh5bGwgNC42IiwgIkNobG9yb3BoeWxsIDUuNSIsICJDaGxvcm9waHlsbCA2LjEiLCANCiAgICAgICAgICAgICAgICAgICJDaGxvcm9waHlsbCA3LjYiLCAiQ2hsb3JvcGh5bGwgMTMuNSIsICdDaGxvcm9waHlsbCAxOScpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIsICJkYXJrIHJlZCIsICJwdXJwbGUiLCAiYmxhY2siKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEd1YW5vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMywyKSkNCmxldmVscyhDQy5Ub3RhbERhdGEkR3Vhbm8pDQoNCmtkMSA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJEd1YW5vPT0iUHJlc2VudCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xMCwxMCksIHlsaW0gPSBjKDAsIDI1KSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKG5vdCBsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIEd1YW5vLCBGbG93ID0gMCIpDQoNCmtkMiA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJEd1YW5vPT0iQWJzZW50Il0pDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkd1YW5vIFByZXNlbnQiLCAiR3Vhbm8gQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojI2tkMSA8LSBkZW5zaXR5KGYuNiR2ZWwuZmxvd1tmLjYkR3Vhbm89PSJQcmVzZW50Il0pDQojI3Bsb3Qoa2QxLCB4bGltID0gYygtNyw3KSwgeWxpbSA9IGMoMCwgMC4xMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChub3QgbG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBHdWFubywgRmxvdyA9IDAuNiIpDQoNCmtkMiA8LSBkZW5zaXR5KGYuNiR2ZWwuZmxvd1tmLjYkR3Vhbm89PSJBYnNlbnQiXSkNCnBsb3Qoa2QyLCB4bGltID0gYygtMTAsMTApLCB5bGltID0gYygwLCAyNSksIGNvbD0ncmVkJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKG5vdCBsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIEd1YW5vLCBGbG93ID0gMC42IikNCiMjbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJHdWFubyBQcmVzZW50IiwgIkd1YW5vIEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KIyNrZDEgPC0gZGVuc2l0eShmMyR2ZWwuZmxvd1tmMyRHdWFubz09IlByZXNlbnQiXSkNCiMjcGxvdChrZDEsIHhsaW0gPSBjKC03LDcpLCB5bGltID0gYygwLCAwLjEyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgR3Vhbm8sIEZsb3cgPSAzIikNCg0Ka2QyIDwtIGRlbnNpdHkoZjMkdmVsLmZsb3dbZjMkR3Vhbm89PSJBYnNlbnQiXSkNCnBsb3Qoa2QyLCB4bGltID0gYygtMTAsMTApLCB5bGltID0gYygwLCAyNSksIGNvbD0ncmVkJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKG5vdCBsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIEd1YW5vLCBGbG93ID0gMyIpDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkd1YW5vIFByZXNlbnQiLCAiR3Vhbm8gQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQojI2tkMSA8LSBkZW5zaXR5KGY1JHZlbC5mbG93W2Y1JEd1YW5vPT0iUHJlc2VudCJdKQ0KIyNwbG90KGtkMSwgeGxpbSA9IGMoLTcsNyksIHlsaW0gPSBjKDAsIDAuMTIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBHdWFubywgRmxvdyA9IDUuOSIpDQoNCmtkMiA8LSBkZW5zaXR5KGY1JHZlbC5mbG93W2Y1JEd1YW5vPT0iQWJzZW50Il0pDQpwbG90KGtkMiwgeGxpbSA9IGMoLTEwLDEwKSwgeWxpbSA9IGMoMCwgMjUpLCBjb2w9J3JlZCcsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChub3QgbG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBHdWFubywgRmxvdyA9IDUuOSIpDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiR3Vhbm8gUHJlc2VudCIsICJHdWFubyBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCiMja2QxIDwtIGRlbnNpdHkoZjgkdmVsLmZsb3dbZjgkR3Vhbm89PSJQcmVzZW50Il0pDQojI3Bsb3Qoa2QxLCB4bGltID0gYygtMTAwLDEwMCksIHlsaW0gPSBjKDAsIDAuMDQpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBHdWFubywgRmxvdyA9IDguOSIpDQoNCmtkMiA8LSBkZW5zaXR5KGY4JHZlbC5mbG93W2Y4JEd1YW5vPT0iQWJzZW50Il0pDQpwbG90KGtkMiwgeGxpbSA9IGMoLTEwLDEwKSwgeWxpbSA9IGMoMCwgMjUpLCBjb2w9J3JlZCcsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChub3QgbG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBHdWFubywgRmxvdyA9IDguOSIpDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiR3Vhbm8gUHJlc2VudCIsICJHdWFubyBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIExpZ2h0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMywyKSkNCmxldmVscyhDQy5Ub3RhbERhdGEkTGlnaHQpDQoNCmtkMSA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xMCwxMCksIHlsaW0gPSBjKDAsIDI1KSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKG5vdCBsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIExpZ2h0LCBGbG93ID0gMCIpDQoNCmtkMiA8LSBkZW5zaXR5KGYwJHZlbC5mbG93W2YwJExpZ2h0PT0iQWJzZW50Il0pDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQprZDEgPC0gZGVuc2l0eShmLjYkdmVsLmZsb3dbZi42JExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xMCwxMCksIHlsaW0gPSBjKDAsIDAyNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChub3QgbG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBMaWdodCwgRmxvdyA9IDAuNiIpDQoNCmtkMiA8LSBkZW5zaXR5KGYuNiR2ZWwuZmxvd1tmLjYkTGlnaHQ9PSJBYnNlbnQiXSkNCiMjcGxvdChrZDIsIHhsaW0gPSBjKC0xMCwxMCksIHlsaW0gPSBjKDAsIDI1KSwgY29sPSdyZWQnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobm90IGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgTGlnaHQsIEZsb3cgPSAwLjYiKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0Ka2QxIDwtIGRlbnNpdHkoZjMkdmVsLmZsb3dbZjMkTGlnaHQ9PSJQcmVzZW50Il0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTEwLDEwKSwgeWxpbSA9IGMoMCwgMjUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobm90IGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgTGlnaHQsIEZsb3cgPSAzIikNCg0KIyNrZDIgPC0gZGVuc2l0eShmMyR2ZWwuZmxvd1tmMyRMaWdodD09IkFic2VudCJdKQ0KIyNwbG90KGtkMiwgeGxpbSA9IGMoLTEwLDEwKSwgeWxpbSA9IGMoMCwgMjUpLCBjb2w9J3JlZCcsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChub3QgbG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBMaWdodCwgRmxvdyA9IDMiKQ0KIyNsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQprZDEgPC0gZGVuc2l0eShmNSR2ZWwuZmxvd1tmNSRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTAsMTApLCB5bGltID0gYygwLCAyNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChub3QgbG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBHdWFubywgRmxvdyA9IDUuOSIpDQoNCiMja2QyIDwtIGRlbnNpdHkoZjUkdmVsLmZsb3dbZjUkTGlnaHQ9PSJBYnNlbnQiXSkNCiMjcGxvdChrZDIsIHhsaW0gPSBjKC0xMCwxMCksIHlsaW0gPSBjKDAsIDI1KSwgY29sPSdyZWQnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobm90IGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgTGlnaHQsIEZsb3cgPSA1LjkiKQ0KIyNsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQprZDEgPC0gZGVuc2l0eShmOCR2ZWwuZmxvd1tmOCRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTAsMTApLCB5bGltID0gYygwLCAyNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChub3QgbG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBMaWdodCwgRmxvdyA9IDguOSIpDQoNCmtkMiA8LSBkZW5zaXR5KGY4JHZlbC5mbG93W2Y4JExpZ2h0PT0iQWJzZW50Il0pDQojI3Bsb3Qoa2QyLCB4bGltID0gYygtMTAsMTApLCB5bGltID0gYygwLCAyNSksIGNvbD0ncmVkJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKG5vdCBsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIExpZ2h0LCBGbG93ID0gOC45IikNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQpgYGANCg0KRm9yIGVhY2ggbGV2ZWwgb2YgQ2hsb3JvcGh5bGwgKHZlbG9jaXR5KQ0KDQpgYGB7cn0NCg0KIyMjIEtlcm5lbCBkZW5zaXR5IHBsb3RzICMjIyMjIyMjIyMjIyMjIyMjIyMgdmVsb2NpdHkNCnBhcihtYXI9IGMoNCw0LDIsMSkpDQpwYXIobWZyb3c9YygzLDMpKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBGbG93IFJhdGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQprZDEgPC0gZGVuc2l0eShsb2cxMChDaGxBMCR2ZWwuZmxvd1tDaGxBMCRGbG93LnJhdGU9PSIwIl0pKQ0KcGxvdChrZDEsIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIEZsb3cgUmF0ZSwgQ2hsb3JvcGh5bGwgPSAwIikNCg0Ka2QyIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTAkdmVsLmZsb3dbQ2hsQTAkRmxvdy5yYXRlPT0iMC42Il0pKQ0KbGluZXMoa2QyLCBjb2w9J2xpZ2h0IGJsdWUnLCBsd2Q9MikNCg0Ka2QzIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTAkdmVsLmZsb3dbQ2hsQTAkRmxvdy5yYXRlPT0iMyJdKSkNCmxpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0Ka2Q0IDwtIGRlbnNpdHkobG9nMTAoQ2hsQTAkdmVsLmZsb3dbQ2hsQTAkRmxvdy5yYXRlPT0iNS45Il0pKQ0KbGluZXMoa2Q0LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQprZDUgPC0gZGVuc2l0eShsb2cxMChDaGxBMCR2ZWwuZmxvd1tDaGxBMCRGbG93LnJhdGU9PSI4LjkiXSkpDQpsaW5lcyhrZDUsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkZsb3cgcmF0ZSAgMCIsICJGbG93IHJhdGUgMC42IiwgIkZsb3cgcmF0ZSAzIiwgIkZsb3cgcmF0ZSA1LjkiLCAiRmxvdyByYXRlIDguOSIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0Ka2QxIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTQuMyR2ZWwuZmxvd1tDaGxBNC4zJEZsb3cucmF0ZT09IjAiXSkpDQpwbG90KGtkMSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDQuMyIpDQoNCmtkMiA8LSBkZW5zaXR5KGxvZzEwKENobEE0LjMkdmVsLmZsb3dbQ2hsQTQuMyRGbG93LnJhdGU9PSIwLjYiXSkpDQpsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQprZDMgPC0gZGVuc2l0eShsb2cxMChDaGxBNC4zJHZlbC5mbG93W0NobEE0LjMkRmxvdy5yYXRlPT0iMyJdKSkNCmxpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0Ka2Q0IDwtIGRlbnNpdHkobG9nMTAoQ2hsQTQuMyR2ZWwuZmxvd1tDaGxBNC4zJEZsb3cucmF0ZT09IjUuOSJdKSkNCmxpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0Ka2Q1IDwtIGRlbnNpdHkobG9nMTAoQ2hsQTQuMyR2ZWwuZmxvd1tDaGxBNC4zJEZsb3cucmF0ZT09IjguOSJdKSkNCmxpbmVzKGtkNSwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiRmxvdyByYXRlICAwIiwgIkZsb3cgcmF0ZSAwLjYiLCAiRmxvdyByYXRlIDMiLCAiRmxvdyByYXRlIDUuOSIsICJGbG93IHJhdGUgOC45IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodCBibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCmtkMSA8LSBkZW5zaXR5KGxvZzEwKENobEE0LjYkdmVsLmZsb3dbQ2hsQTQuNiRGbG93LnJhdGU9PSIwIl0pKQ0KcGxvdChrZDEsIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIEZsb3cgUmF0ZSwgQ2hsb3JvcGh5bGwgPSA0LjYiKQ0KDQprZDIgPC0gZGVuc2l0eShsb2cxMChDaGxBNC42JHZlbC5mbG93W0NobEE0LjYkRmxvdy5yYXRlPT0iMC42Il0pKQ0KbGluZXMoa2QyLCBjb2w9J2xpZ2h0IGJsdWUnLCBsd2Q9MikNCg0Ka2QzIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTQuNiR2ZWwuZmxvd1tDaGxBNC42JEZsb3cucmF0ZT09IjMiXSkpDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KGxvZzEwKENobEE0LjYkdmVsLmZsb3dbQ2hsQTQuNiRGbG93LnJhdGU9PSI1LjkiXSkpDQpsaW5lcyhrZDQsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCmtkNSA8LSBkZW5zaXR5KGxvZzEwKENobEE0LjYkdmVsLmZsb3dbQ2hsQTQuNiRGbG93LnJhdGU9PSI4LjkiXSkpDQpsaW5lcyhrZDUsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkZsb3cgcmF0ZSAgMCIsICJGbG93IHJhdGUgMC42IiwgIkZsb3cgcmF0ZSAzIiwgIkZsb3cgcmF0ZSA1LjkiLCAiRmxvdyByYXRlIDguOSIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShsb2cxMChDaGxBNS41JHZlbC5mbG93W0NobEE1LjUkRmxvdy5yYXRlPT0iMCJdKSkNCnBsb3Qoa2QxLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gNS41IikNCg0Ka2QyIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTUuNSR2ZWwuZmxvd1tDaGxBNS41JEZsb3cucmF0ZT09IjAuNiJdKSkNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KGxvZzEwKENobEE0NS41JHZlbC5mbG93W0NobEE1LjUkRmxvdy5yYXRlPT0iMyJdKSkNCmxpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0Ka2Q0IDwtIGRlbnNpdHkobG9nMTAoQ2hsNS41JHZlbC5mbG93W0NobEE1LjUkRmxvdy5yYXRlPT0iNS45Il0pKQ0KbGluZXMoa2Q0LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQprZDUgPC0gZGVuc2l0eShsb2cxMChDaGxBNS41JHZlbC5mbG93W0NobEE1LjUkRmxvdy5yYXRlPT0iOC45Il0pKQ0KbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTYkdmVsLmZsb3dbQ2hsQTYkRmxvdy5yYXRlPT0iMCJdKSkNCnBsb3Qoa2QxLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gNiIpDQoNCmtkMiA8LSBkZW5zaXR5KGxvZzEwKENobEE2JHZlbC5mbG93W0NobEE2JEZsb3cucmF0ZT09IjAuNiJdKSkNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KGxvZzEwKENobEE2JHZlbC5mbG93W0NobEE2JEZsb3cucmF0ZT09IjMiXSkpDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KGxvZzEwKENobEE2JHZlbC5mbG93W0NobEE2JEZsb3cucmF0ZT09IjUuOSJdKSkNCmxpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0Ka2Q1IDwtIGRlbnNpdHkobG9nMTAoQ2hsQTYkdmVsLmZsb3dbQ2hsQTYkRmxvdy5yYXRlPT0iOC45Il0pKQ0KbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTckdmVsLmZsb3dbQ2hsQTckRmxvdy5yYXRlPT0iMCJdKSkNCnBsb3Qoa2QxLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gNyIpDQoNCmtkMiA8LSBkZW5zaXR5KGxvZzEwKENobEE3JHZlbC5mbG93W0NobEE3JEZsb3cucmF0ZT09IjAuNiJdKSkNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KGxvZzEwKENobEE3JHZlbC5mbG93W0NobEE3JEZsb3cucmF0ZT09IjMiXSkpDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KGxvZzEwKENobEE3JHZlbC5mbG93W0NobEE3JEZsb3cucmF0ZT09IjUuOSJdKSkNCmxpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0Ka2Q1IDwtIGRlbnNpdHkobG9nMTAoQ2hsQTckdmVsLmZsb3dbQ2hsQTckRmxvdy5yYXRlPT0iOC45Il0pKQ0KbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTEzJHZlbC5mbG93W0NobEExMyRGbG93LnJhdGU9PSIwIl0pKQ0KcGxvdChrZDEsIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIEZsb3cgUmF0ZSwgQ2hsb3JvcGh5bGwgPSAxMyIpDQoNCmtkMiA8LSBkZW5zaXR5KGxvZzEwKENobEExMyR2ZWwuZmxvd1tDaGxBMTMkRmxvdy5yYXRlPT0iMC42Il0pKQ0KbGluZXMoa2QyLCBjb2w9J2xpZ2h0IGJsdWUnLCBsd2Q9MikNCg0Ka2QzIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTEzJHZlbC5mbG93W0NobEExMyRGbG93LnJhdGU9PSIzIl0pKQ0KbGluZXMoa2QzLCBjb2w9J3llbGxvdycsIGx3ZD0yKQ0KDQprZDQgPC0gZGVuc2l0eShsb2cxMChDaGxBMTMkdmVsLmZsb3dbQ2hsQTEzJEZsb3cucmF0ZT09IjUuOSJdKSkNCmxpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0Ka2Q1IDwtIGRlbnNpdHkobG9nMTAoQ2hsQTEzJHZlbC5mbG93W0NobEExMyRGbG93LnJhdGU9PSI4LjkiXSkpDQpsaW5lcyhrZDUsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkZsb3cgcmF0ZSAgMCIsICJGbG93IHJhdGUgMC42IiwgIkZsb3cgcmF0ZSAzIiwgIkZsb3cgcmF0ZSA1LjkiLCAiRmxvdyByYXRlIDguOSIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShsb2cxMChDaGxBMTkkdmVsLmZsb3dbQ2hsQTE5JEZsb3cucmF0ZT09IjAiXSkpDQpwbG90KGtkMSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDE5IikNCg0Ka2QyIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTE5JHZlbC5mbG93W0NobEExOSRGbG93LnJhdGU9PSIwLjYiXSkpDQpsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQprZDMgPC0gZGVuc2l0eShsb2cxMChDaGxBMTkkdmVsLmZsb3dbQ2hsQTE5JEZsb3cucmF0ZT09IjMiXSkpDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KGxvZzEwKENobEExOSR2ZWwuZmxvd1tDaGxBMTkkRmxvdy5yYXRlPT0iNS45Il0pKQ0KbGluZXMoa2Q0LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQprZDUgPC0gZGVuc2l0eShsb2cxMChDaGxBMTkkdmVsLmZsb3dbQ2hsQTE5JEZsb3cucmF0ZT09IjguOSJdKSkNCmxpbmVzKGtkNSwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiRmxvdyByYXRlICAwIiwgIkZsb3cgcmF0ZSAwLjYiLCAiRmxvdyByYXRlIDMiLCAiRmxvdyByYXRlIDUuOSIsICJGbG93IHJhdGUgOC45IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodCBibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIExpZ2h0ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcGFyKG1hcj0gYyg0LDQsMiwxKSkNCnBhcihtZnJvdz1jKDMsMykpDQoNCmtkMSA8LSBkZW5zaXR5KGxvZzEwKENobEEwJHZlbC5mbG93W0NobEEwJExpZ2h0PT0iUHJlc2VudCJdKSkNCnBsb3Qoa2QxLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBMaWdodCwgQ2hsb3JvcGh5bGwgPSAwIikNCg0Ka2QyIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTAkdmVsLmZsb3dbQ2hsQTAkTGlnaHQ9PSJBYnNlbnQiXSkpDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCmtkMSA8LSBkZW5zaXR5KGxvZzEwKENobEE0LjMkdmVsLmZsb3dbQ2hsQTQuMyRMaWdodD09IlByZXNlbnQiXSkpDQpwbG90KGtkMSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiVmVsb2NpdHkgKGxvZ2dlZCwgaW4gcmVsYXRpb24gdG8gZmxvdykgVnMgTGlnaHQsIENobG9yb3BoeWxsID0gNC4zIikNCg0Ka2QyIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTQuMyR2ZWwuZmxvd1tDaGxBNC4zJExpZ2h0PT0iQWJzZW50Il0pKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQprZDEgPC0gZGVuc2l0eShsb2cxMChDaGxBNC42JHZlbC5mbG93W0NobEE0LjYkTGlnaHQ9PSJQcmVzZW50Il0pKQ0KcGxvdChrZDEsIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDQuNiIpDQoNCmtkMiA8LSBkZW5zaXR5KGxvZzEwKENobEE0LjYkdmVsLmZsb3dbQ2hsQTQuNiRMaWdodD09IkFic2VudCJdKSkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0Ka2QxIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTUuNSR2ZWwuZmxvd1tDaGxBNS41JExpZ2h0PT0iUHJlc2VudCJdKSkNCnBsb3Qoa2QxLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBMaWdodCwgQ2hsb3JvcGh5bGwgPSA1LjUiKQ0KDQprZDIgPC0gZGVuc2l0eShsb2cxMChDaGxBNS41JHZlbC5mbG93W0NobEE1LjUkTGlnaHQ9PSJBYnNlbnQiXSkpDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTYkdmVsLmZsb3dbQ2hsQTYkTGlnaHQ9PSJQcmVzZW50Il0pKQ0KcGxvdChrZDEsIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDYiKQ0KDQprZDIgPC0gZGVuc2l0eShsb2cxMChDaGxBNiR2ZWwuZmxvd1tDaGxBNiRMaWdodD09IkFic2VudCJdKSkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0Ka2QxIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTckdmVsLmZsb3dbQ2hsQTckTGlnaHQ9PSJQcmVzZW50Il0pKQ0KcGxvdChrZDEsIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDciKQ0KDQprZDIgPC0gZGVuc2l0eShsb2cxMChDaGxBNyR2ZWwuZmxvd1tDaGxBNyRMaWdodD09IkFic2VudCJdKSkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShsb2cxMChDaGxBMTMkdmVsLmZsb3dbQ2hsQTEzJExpZ2h0PT0iUHJlc2VudCJdKSkNCnBsb3Qoa2QxLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJWZWxvY2l0eSAobG9nZ2VkLCBpbiByZWxhdGlvbiB0byBmbG93KSBWcyBMaWdodCwgQ2hsb3JvcGh5bGwgPSAxMyIpDQoNCmtkMiA8LSBkZW5zaXR5KGxvZzEwKENobEExMyR2ZWwuZmxvd1tDaGxBMTMkTGlnaHQ9PSJBYnNlbnQiXSkpDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCmtkMSA8LSBkZW5zaXR5KGxvZzEwKENobEExOSR2ZWwuZmxvd1tDaGxBMTkkTGlnaHQ9PSJQcmVzZW50Il0pKQ0KcGxvdChrZDEsIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIlZlbG9jaXR5IChsb2dnZWQsIGluIHJlbGF0aW9uIHRvIGZsb3cpIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDE5IikNCg0Ka2QyIDwtIGRlbnNpdHkobG9nMTAoQ2hsQTE5JHZlbC5mbG93W0NobEExOSRMaWdodD09IkFic2VudCJdKSkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KcmFuZ2UoQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGUpDQpgYGANCg0KTm93IGZvciBlYWNoIGxldmVsIG9mIEZsb3cgKGZvciBoZWFkaW5ncykNCg0KYGBge3J9DQoNCiMjIyBLZXJuZWwgZGVuc2l0eSBwbG90cyAjIyMjIyMjIyMjIyMjIyMjIyMjIEhlYWRpbmdzDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMSwyKSkNCg0KZjAkaGVhZGluZyA8LSBhdGFuMihmMCRkeCwgZjAkZHkpDQpyYW5nZShmMCRoZWFkaW5nKQ0KZjAkaGVhZGluZy5waSA8LSBmMCRoZWFkaW5nLygyKnBpKSozNjANCnJhbmdlKENDLlRvdGFsRGF0YSRoZWFkaW5nKSAgIyMgZ2l2ZXMgLTMuMTQgdG8gMy4xNA0KcmFuZ2UoZjAkaGVhZGluZy5waSkgICMjIGdpdmVzIC0xODAgdG8gMTgwICANCg0KDQpmLjYkaGVhZGluZyA8LSBhdGFuMihmLjYkZHgsIGYuNiRkeSkNCnJhbmdlKGYuNiRoZWFkaW5nKQ0KZi42JGhlYWRpbmcucGkgPC0gZi42JGhlYWRpbmcvKDIqcGkpKjM2MA0KcmFuZ2UoQ0MuVG90YWxEYXRhJGhlYWRpbmcpICAjIyBnaXZlcyAtMy4xNCB0byAzLjE0DQpyYW5nZShmLjYkaGVhZGluZy5waSkgICMjIGdpdmVzIC0xODAgdG8gMTgwICANCg0KDQpmMyRoZWFkaW5nIDwtIGF0YW4yKGYzJGR4LCBmMyRkeSkNCnJhbmdlKGYzJGhlYWRpbmcpDQpmMyRoZWFkaW5nLnBpIDwtIGYzJGhlYWRpbmcvKDIqcGkpKjM2MA0KcmFuZ2UoQ0MuVG90YWxEYXRhJGhlYWRpbmcpICAjIyBnaXZlcyAtMy4xNCB0byAzLjE0DQpyYW5nZShmMyRoZWFkaW5nLnBpKSAgIyMgZ2l2ZXMgLTE4MCB0byAxODAgIA0KDQoNCmY1JGhlYWRpbmcgPC0gYXRhbjIoZjUkZHgsIGY1JGR5KQ0KcmFuZ2UoZjUkaGVhZGluZykNCmY1JGhlYWRpbmcucGkgPC0gZjUkaGVhZGluZy8oMipwaSkqMzYwDQpyYW5nZShDQy5Ub3RhbERhdGEkaGVhZGluZykgICMjIGdpdmVzIC0zLjE0IHRvIDMuMTQNCnJhbmdlKGY1JGhlYWRpbmcucGkpICAjIyBnaXZlcyAtMTgwIHRvIDE4MCAgDQoNCg0KZjgkaGVhZGluZyA8LSBhdGFuMihmOCRkeCwgZjgkZHkpDQpyYW5nZShmOCRoZWFkaW5nKQ0KZjgkaGVhZGluZy5waSA8LSBmOCRoZWFkaW5nLygyKnBpKSozNjANCnJhbmdlKENDLlRvdGFsRGF0YSRoZWFkaW5nKSAgIyMgZ2l2ZXMgLTMuMTQgdG8gMy4xNA0KcmFuZ2UoZjgkaGVhZGluZy5waSkgICMjIGdpdmVzIC0xODAgdG8gMTgwICANCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDaGxvcm9waHlsbCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxldmVscyhDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGwpDQoNCnBhcihtYXI9IGMoNCw0LDIsMSkpDQpwYXIobWZyb3c9YygxLDIpKQ0KDQprZDEgPC0gZGVuc2l0eShmMCRoZWFkaW5nLnBpW2YwJENobG9yb3BoeWxsPT0iMCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkZsb3cgPSAwIiwgeGxhYiA9ICJIZWFkaW5nIChkZWdyZWVzKSIpDQoNCiMja2QyIDwtIGRlbnNpdHkoZjAkaGVhZGluZy5waVtmMCRDaGxvcm9waHlsbD09IjQuMyJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQprZDMgPC0gZGVuc2l0eShmMCRoZWFkaW5nLnBpW2YwJENobG9yb3BoeWxsPT0iNC42Il0pDQpsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCmtkOCA8LSBkZW5zaXR5KGYwJGhlYWRpbmcucGlbZjAkQ2hsb3JvcGh5bGw9PSI1LjUiXSkNCmxpbmVzKGtkOCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShmMCRoZWFkaW5nLnBpW2YwJENobG9yb3BoeWxsPT0iNi4xIl0pDQojI2xpbmVzKGtkNCwgY29sPSdyZWQnLCBsd2Q9MikNCg0Ka2Q1IDwtIGRlbnNpdHkoZjAkaGVhZGluZy5waVtmMCRDaGxvcm9waHlsbD09IjcuNiJdKQ0KbGluZXMoa2Q1LCBjb2w9J2RhcmsgcmVkJywgbHdkPTIpDQoNCiMja2Q2IDwtIGRlbnNpdHkoZjAkaGVhZGluZy5waVtmMCRDaGxvcm9waHlsbD09IjEzLjUiXSkNCiMjbGluZXMoa2Q2LCBjb2w9J3B1cnBsZScsIGx3ZD0yKQ0KDQprZDcgPC0gZGVuc2l0eShmMCRoZWFkaW5nLnBpW2YwJENobG9yb3BoeWxsPT0iMTkiXSkNCmxpbmVzKGtkNywgY29sPSdibGFjaycsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJDaGxvcm9waHlsbCAgMCIsICAiQ2hsb3JvcGh5bGwgNC42IiwgIkNobG9yb3BoeWxsIDUuNSIsICANCiAgICAgICAgICAgICAgICAgICJDaGxvcm9waHlsbCA3LjYiLCAgJ0NobG9yb3BoeWxsIDE5JyksDQogICAgICAgY29sID0gYygiYmx1ZSIsICAieWVsbG93IiwgIm9yYW5nZSIsICAiZGFyayByZWQiLCAiYmxhY2siKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoZi42JGhlYWRpbmcucGlbZi42JENobG9yb3BoeWxsPT0iMCJdKQ0KcGxvdChrZDEseGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiRmxvdyA9IDAuNiIsIHhsYWIgPSAiSGVhZGluZyAoZGVncmVlcykiKQ0KDQprZDIgPC0gZGVuc2l0eShmLjYkaGVhZGluZy5waVtmLjYkQ2hsb3JvcGh5bGw9PSI0LjMiXSkNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCmtkMyA8LSBkZW5zaXR5KGYuNiRoZWFkaW5nLnBpW2YuNiRDaGxvcm9waHlsbD09IjQuNiJdKQ0KbGluZXMoa2QzLCBjb2w9J3llbGxvdycsIGx3ZD0yKQ0KDQojI2tkOCA8LSBkZW5zaXR5KGYuNiRoZWFkaW5nLnBpW2YuNiRDaGxvcm9waHlsbD09IjUuNSJdKQ0KIyNsaW5lcyhrZDgsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCmtkNCA8LSBkZW5zaXR5KGYuNiRoZWFkaW5nLnBpW2YuNiRDaGxvcm9waHlsbD09IjYuMSJdKQ0KbGluZXMoa2Q0LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQojI2tkNSA8LSBkZW5zaXR5KGYuNiRoZWFkaW5nLnBpW2YuNiRDaGxvcm9waHlsbD09IjcuNiJdKQ0KIyNsaW5lcyhrZDUsIGNvbD0nZGFyayByZWQnLCBsd2Q9MikNCg0Ka2Q2IDwtIGRlbnNpdHkoZi42JGhlYWRpbmcucGlbZi42JENobG9yb3BoeWxsPT0iMTMuNSJdKQ0KbGluZXMoa2Q2LCBjb2w9J3B1cnBsZScsIGx3ZD0yKQ0KDQojI2tkNyA8LSBkZW5zaXR5KGYuNiRoZWFkaW5nLnBpW2YuNiRDaGxvcm9waHlsbD09IjE5Il0pDQojI2xpbmVzKGtkNywgY29sPSdibGFjaycsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJDaGxvcm9waHlsbCAgMCIsICJDaGxvcm9waHlsbCA0LjMiLCAiQ2hsb3JvcGh5bGwgNC42IiwgIkNobG9yb3BoeWxsIDYuMSIsIA0KICAgICAgICAgICAgICAiQ2hsb3JvcGh5bGwgMTMuNSIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAgInJlZCIsICJwdXJwbGUiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCmtkMSA8LSBkZW5zaXR5KGYzJGhlYWRpbmcucGlbZjMkQ2hsb3JvcGh5bGw9PSIwIl0pDQpwbG90KGtkMSx4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDMpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5ncyBWcyBDaGxvcm9waHlsbCwgRmxvdyA9IDMiKQ0KDQojI2tkMiA8LSBkZW5zaXR5KGYzJGhlYWRpbmcucGlbZjMkQ2hsb3JvcGh5bGw9PSI0LjMiXSkNCiMjbGluZXMoa2QyLCBjb2w9J2xpZ2h0IGJsdWUnLCBsd2Q9MikNCg0KIyNrZDMgPC0gZGVuc2l0eShmMyRoZWFkaW5nLnBpW2YzJENobG9yb3BoeWxsPT0iNC42Il0pDQojI2xpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0KIyNrZDggPC0gZGVuc2l0eShmMyRoZWFkaW5nLnBpW2YzJENobG9yb3BoeWxsPT0iNS41Il0pDQojI2xpbmVzKGtkOCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShmMyRoZWFkaW5nLnBpW2YzJENobG9yb3BoeWxsPT0iNi4xIl0pDQojI2xpbmVzKGtkNCwgY29sPSdyZWQnLCBsd2Q9MikNCg0KIyNrZDUgPC0gZGVuc2l0eShmMyRoZWFkaW5nLnBpW2YzJENobG9yb3BoeWxsPT0iNy42Il0pDQojI2xpbmVzKGtkNSwgY29sPSdkYXJrIHJlZCcsIGx3ZD0yKQ0KDQojI2tkNiA8LSBkZW5zaXR5KGYzJGhlYWRpbmcucGlbZjMkQ2hsb3JvcGh5bGw9PSIxMy41Il0pDQojI2xpbmVzKGtkNiwgY29sPSdwdXJwbGUnLCBsd2Q9MikNCg0KIyNrZDcgPC0gZGVuc2l0eShmMyRoZWFkaW5nLnBpW2YzJENobG9yb3BoeWxsPT0iMTkiXSkNCiMjbGluZXMoa2Q3LCBjb2w9J2JsYWNrJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkNobG9yb3BoeWxsICAwIiwgIkNobG9yb3BoeWxsIDQuMyIsICJDaGxvcm9waHlsbCA0LjYiLCAiQ2hscm9waHlsbCA1LjUiLCAiQ2hsb3JvcGh5bGwgNi4xIiwgDQogICAgICAgICAgICAgICAgICAiQ2hsb3JvcGh5bGwgNy42IiwgIkNobG9yb3BoeWxsIDEzLjUiLCAnQ2hsb3JvcGh5bGwgMTknKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiLCAiZGFyayByZWQiLCAicHVycGxlIiwgImJsYWNrIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCmtkMSA8LSBkZW5zaXR5KGY1JGhlYWRpbmcucGlbZjUkQ2hsb3JvcGh5bGw9PSIwIl0pDQpwbG90KGtkMSx4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDMpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5ncyBWcyBDaGxvcm9waHlsbCwgRmxvdyA9IDUuOSIpDQoNCiMja2QyIDwtIGRlbnNpdHkoZjUkaGVhZGluZy5waVtmNSRDaGxvcm9waHlsbD09IjQuMyJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQojI2tkMyA8LSBkZW5zaXR5KGY1JGhlYWRpbmcucGlbZjUkQ2hsb3JvcGh5bGw9PSI0LjYiXSkNCiMjbGluZXMoa2QzLCBjb2w9J3llbGxvdycsIGx3ZD0yKQ0KDQojI2tkOCA8LSBkZW5zaXR5KGY1JGhlYWRpbmcucGlbZjUkQ2hsb3JvcGh5bGw9PSI1LjUiXSkNCiMjbGluZXMoa2Q4LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQojI2tkNCA8LSBkZW5zaXR5KGY1JGhlYWRpbmcucGlbZjUkQ2hsb3JvcGh5bGw9PSI2LjEiXSkNCiMjbGluZXMoa2Q0LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQojI2tkNSA8LSBkZW5zaXR5KGY1JGhlYWRpbmcucGlbZjUkQ2hsb3JvcGh5bGw9PSI3LjYiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J2RhcmsgcmVkJywgbHdkPTIpDQoNCiMja2Q2IDwtIGRlbnNpdHkoZjUkaGVhZGluZy5waVtmNSRDaGxvcm9waHlsbD09IjEzLjUiXSkNCiMjbGluZXMoa2Q2LCBjb2w9J3B1cnBsZScsIGx3ZD0yKQ0KDQojI2tkNyA8LSBkZW5zaXR5KGY1JGhlYWRpbmcucGlbZjUkQ2hsb3JvcGh5bGw9PSIxOSJdKQ0KIyNsaW5lcyhrZDcsIGNvbD0nYmxhY2snLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiQ2hsb3JvcGh5bGwgIDAiLCAiQ2hsb3JvcGh5bGwgNC4zIiwgIkNobG9yb3BoeWxsIDQuNiIsICJDaGxvcm9waHlsbCA1LjUiLCAiQ2hsb3JvcGh5bGwgNi4xIiwgDQogICAgICAgICAgICAgICAgICAiQ2hsb3JvcGh5bGwgNy42IiwgIkNobG9yb3BoeWxsIDEzLjUiLCAnQ2hsb3JvcGh5bGwgMTknKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiLCAiZGFyayByZWQiLCAicHVycGxlIiwgImJsYWNrIiksDQogICAgICAgbHR5ID0gMSkNCg0Ka2QxIDwtIGRlbnNpdHkoZjgkaGVhZGluZy5waVtmOCRDaGxvcm9waHlsbD09IjAiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDMpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5ncyBWcyBDaGxvcm9waHlsbCwgRmxvdyA9IDguOSIpDQoNCiMja2QyIDwtIGRlbnNpdHkoZjgkaGVhZGluZy5waVtmOCRDaGxvcm9waHlsbD09IjQuMyJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQojI2tkMyA8LSBkZW5zaXR5KGY4JGhlYWRpbmcucGlbZjgkQ2hsb3JvcGh5bGw9PSI0LjYiXSkNCiMjbGluZXMoa2QzLCBjb2w9J3llbGxvdycsIGx3ZD0yKQ0KDQojI2tkOCA8LSBkZW5zaXR5KGY4JGhlYWRpbmcucGlbZjgkQ2hsb3JvcGh5bGw9PSI1LjUiXSkNCiMjbGluZXMoa2Q4LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQojI2tkNCA8LSBkZW5zaXR5KGY4JGhlYWRpbmcucGlbZjgkQ2hsb3JvcGh5bGw9PSI2LjEiXSkNCiMjbGluZXMoa2Q0LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQojI2tkNSA8LSBkZW5zaXR5KGY4JGhlYWRpbmcucGlbZjgkQ2hsb3JvcGh5bGw9PSI3LjYiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J2RhcmsgcmVkJywgbHdkPTIpDQoNCiMja2Q2IDwtIGRlbnNpdHkoZjgkaGVhZGluZy5waVtmOCRDaGxvcm9waHlsbD09IjEzLjUiXSkNCiMjbGluZXMoa2Q2LCBjb2w9J3B1cnBsZScsIGx3ZD0yKQ0KDQojI2tkNyA8LSBkZW5zaXR5KGY4JGhlYWRpbmcucGlbZjgkQ2hsb3JvcGh5bGw9PSIxOSJdKQ0KIyNsaW5lcyhrZDcsIGNvbD0nYmxhY2snLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiQ2hsb3JvcGh5bGwgIDAiLCAiQ2hsb3JvcGh5bGwgNC4zIiwgIkNobG9yb3BoeWxsIDQuNiIsICJDaGxvcm9waHlsbCA1LjUiLCAiQ2hsb3JvcGh5bGwgNi4xIiwgDQogICAgICAgICAgICAgICAgICAiQ2hsb3JvcGh5bGwgNy42IiwgIkNobG9yb3BoeWxsIDEzLjUiLCAnQ2hsb3JvcGh5bGwgMTknKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiLCAiZGFyayByZWQiLCAicHVycGxlIiwgImJsYWNrIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEd1YW5vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMywyKSkNCmxldmVscyhDQy5Ub3RhbERhdGEkR3Vhbm8pDQoNCmtkMSA8LSBkZW5zaXR5KGYwJGhlYWRpbmcucGlbZjAkR3Vhbm89PSJQcmVzZW50Il0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAzKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgR3Vhbm8sIEZsb3cgPSAwIikNCg0Ka2QyIDwtIGRlbnNpdHkoZjAkaGVhZGluZy5waVtmMCRHdWFubz09IkFic2VudCJdKQ0KbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJHdWFubyBQcmVzZW50IiwgIkd1YW5vIEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCiMja2QxIDwtIGRlbnNpdHkoZi42JGhlYWRpbmcucGlbZi42JEd1YW5vPT0iUHJlc2VudCJdKQ0KIyNwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAxKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgR3Vhbm8sIEZsb3cgPSAwLjYiKQ0KDQprZDIgPC0gZGVuc2l0eShmLjYkaGVhZGluZy5waVtmLjYkR3Vhbm89PSJBYnNlbnQiXSkNCnBsb3Qoa2QyLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDMpLCBjb2w9J3JlZCcsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIEd1YW5vLCBGbG93ID0gMC42IikNCiMjbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJHdWFubyBQcmVzZW50IiwgIkd1YW5vIEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCiMja2QxIDwtIGRlbnNpdHkoZjMkaGVhZGluZy5waVtmMyRHdWFubz09IlByZXNlbnQiXSkNCiMjcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIEd1YW5vLCBGbG93ID0gMyIpDQoNCmtkMiA8LSBkZW5zaXR5KGYzJGhlYWRpbmcucGlbZjMkR3Vhbm89PSJBYnNlbnQiXSkNCnBsb3Qoa2QyLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDMpLCBjb2w9J3JlZCcsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIEd1YW5vLCBGbG93ID0gMyIpDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJHdWFubyBQcmVzZW50IiwgIkd1YW5vIEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCiMja2QxIDwtIGRlbnNpdHkoZjUkaGVhZGluZy5waVtmNSRHdWFubz09IlByZXNlbnQiXSkNCiMjcGxvdChrZDEsIHhsaW0gPSBjKDUsMTc1KSwgeWxpbSA9IGMoMCwgMC4wMyksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIEd1YW5vLCBGbG93ID0gNS45IikNCg0Ka2QyIDwtIGRlbnNpdHkoZjUkaGVhZGluZy5waVtmNSRHdWFubz09IkFic2VudCJdKQ0KcGxvdChrZDIsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMyksIGNvbD0ncmVkJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgR3Vhbm8sIEZsb3cgPSA1LjkiKQ0KIyNsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkd1YW5vIFByZXNlbnQiLCAiR3Vhbm8gQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0KIyNrZDEgPC0gZGVuc2l0eShmOCRoZWFkaW5nLnBpW2Y4JEd1YW5vPT0iUHJlc2VudCJdKQ0KIyNwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAzKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgR3Vhbm8sIEZsb3cgPSA4LjkiKQ0KDQprZDIgPC0gZGVuc2l0eShmOCRoZWFkaW5nLnBpW2Y4JEd1YW5vPT0iQWJzZW50Il0pDQpwbG90KGtkMiwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAzKSwgY29sPSdyZWQnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5ncyBWcyBHdWFubywgRmxvdyA9IDguOSIpDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiR3Vhbm8gUHJlc2VudCIsICJHdWFubyBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBMaWdodCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMywyKSkNCmxldmVscyhDQy5Ub3RhbERhdGEkTGlnaHQpDQoNCmtkMSA8LSBkZW5zaXR5KGYwJGhlYWRpbmcucGlbZjAkTGlnaHQ9PSJQcmVzZW50Il0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAxNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIExpZ2h0LCBGbG93ID0gMCIpDQoNCmtkMiA8LSBkZW5zaXR5KGYwJGhlYWRpbmcucGlbZjAkTGlnaHQ9PSJBYnNlbnQiXSkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShmLjYkaGVhZGluZy5waVtmLjYkTGlnaHQ9PSJQcmVzZW50Il0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAxNSksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIExpZ2h0LCBGbG93ID0gMC42IikNCg0Ka2QyIDwtIGRlbnNpdHkoZi42JGhlYWRpbmcucGlbZi42JExpZ2h0PT0iQWJzZW50Il0pDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoZjMkaGVhZGluZy5waVtmMyRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDE1KSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgTGlnaHQsIEZsb3cgPSAzIikNCg0KIyNrZDIgPC0gZGVuc2l0eShmMyRoZWFkaW5nLnBpW2YzJExpZ2h0PT0iQWJzZW50Il0pDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShmNSRoZWFkaW5nLnBpW2Y1JExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMTUpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5ncyBWcyBMaWdodCwgRmxvdyA9IDUuOSIpDQoNCiMja2QyIDwtIGRlbnNpdHkoZjUkaGVhZGluZy5waVtmNSRMaWdodD09IkFic2VudCJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoZjgkaGVhZGluZy5waVtmOCRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDE1KSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgTGlnaHQsIEZsb3cgPSA4LjkiKQ0KDQprZDIgPC0gZGVuc2l0eShmOCRoZWFkaW5nLnBpW2Y4JExpZ2h0PT0iQWJzZW50Il0pDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCmBgYA0KDQpOb3cgZm9yIGVhY2ggbGV2ZWwgb2YgQ2hsb3JvcGh5bGwgKGZvciBoZWFkaW5ncykNCg0KYGBge3J9DQoNCiMjIyBLZXJuZWwgZGVuc2l0eSBwbG90cyAjIyMjIyMjIyMjIyMjIyMjIyMjIEhlYWRpbmdzDQpwYXIobWFyPSBjKDQsNCwyLDEpKQ0KcGFyKG1mcm93PWMoMywzKSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRmxvdyBSYXRlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGV2ZWxzKENDLlRvdGFsRGF0YSRGbG93LnJhdGUpDQoNCnBhcihtYXI9IGMoNCw0LDIsMSkpDQpwYXIobWZyb3c9YygzLDMpKQ0KDQprZDEgPC0gZGVuc2l0eShDaGxBMCRoZWFkaW5nLnBpW0NobEEwJEZsb3cucmF0ZT09IjAiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDEyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZyBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gMCIpDQoNCmtkMiA8LSBkZW5zaXR5KENobEEwJGhlYWRpbmcucGlbQ2hsQTAkRmxvdy5yYXRlPT0iMC42Il0pDQpsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQprZDMgPC0gZGVuc2l0eShDaGxBMCRoZWFkaW5nLnBpW0NobEEwJEZsb3cucmF0ZT09IjMiXSkNCmxpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0Ka2Q0IDwtIGRlbnNpdHkoQ2hsQTAkaGVhZGluZy5waVtDaGxBMCRGbG93LnJhdGU9PSI1LjkiXSkNCmxpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0Ka2Q1IDwtIGRlbnNpdHkoQ2hsQTAkaGVhZGluZy5waVtDaGxBMCRGbG93LnJhdGU9PSI4LjkiXSkNCmxpbmVzKGtkNSwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiRmxvdyByYXRlICAwIiwgIkZsb3cgcmF0ZSAwLjYiLCAiRmxvdyByYXRlIDMiLCAiRmxvdyByYXRlIDUuOSIsICJGbG93IHJhdGUgOC45IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodCBibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCg0KIyNrZDEgPC0gZGVuc2l0eShDaGxBNC4zJGhlYWRpbmcucGlbQ2hsQTQuMyRGbG93LnJhdGU9PSIwIl0pDQojI3Bsb3Qoa2QxLCB4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5nIFZzIEZsb3cgUmF0ZSwgQ2hsb3JvcGh5bGwgPSA0LjMiKQ0KDQprZDIgPC0gZGVuc2l0eShDaGxBNC4zJGhlYWRpbmcucGlbQ2hsQTQuMyRGbG93LnJhdGU9PSIwLjYiXSkNCnBsb3Qoa2QyLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDEyKSwgY29sPSdsaWdodCBibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZyBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gNC4zIikNCiMjbGluZXMoa2QyLCBjb2w9J2xpZ2h0IGJsdWUnLCBsd2Q9MikNCg0KIyNrZDMgPC0gZGVuc2l0eShDaGxBNC4zJGhlYWRpbmcucGlbQ2hsQTQuMyRGbG93LnJhdGU9PSIzIl0pDQojI2xpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShDaGxBNC4zJGhlYWRpbmcucGlbQ2hsQTQuMyRGbG93LnJhdGU9PSI1LjkiXSkNCiMjbGluZXMoa2Q0LCBjb2w9J29yYW5nZScsIGx3ZD0yKQ0KDQojI2tkNSA8LSBkZW5zaXR5KENobEE0LjMkaGVhZGluZy5waVtDaGxBNC4zJEZsb3cucmF0ZT09IjguOSJdKQ0KIyNsaW5lcyhrZDUsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkZsb3cgcmF0ZSAgMCIsICJGbG93IHJhdGUgMC42IiwgIkZsb3cgcmF0ZSAzIiwgIkZsb3cgcmF0ZSA1LjkiLCAiRmxvdyByYXRlIDguOSIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShDaGxBNC42JGhlYWRpbmcucGlbQ2hsQTQuNiRGbG93LnJhdGU9PSIwIl0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAxMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmcgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDQuNiIpDQoNCmtkMiA8LSBkZW5zaXR5KENobEE0LjYkaGVhZGluZy5waVtDaGxBNC42JEZsb3cucmF0ZT09IjAuNiJdKQ0KIyNwbG90KGtkMiwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdsaWdodCBibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZyBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gNC42IikNCmxpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoQ2hsQTQuNiRoZWFkaW5nLnBpW0NobEE0LjYkRmxvdy5yYXRlPT0iMyJdKQ0KIyNsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCiMja2Q0IDwtIGRlbnNpdHkoQ2hsQTQuNiRoZWFkaW5nLnBpW0NobEE0LjYkRmxvdy5yYXRlPT0iNS45Il0pDQojI2xpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDUgPC0gZGVuc2l0eShDaGxBNC42JGhlYWRpbmcucGlbQ2hsQTQuNiRGbG93LnJhdGU9PSI4LjkiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTUuNSRoZWFkaW5nLnBpW0NobEE1LjUkRmxvdy5yYXRlPT0iMCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMTIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5nIFZzIEZsb3cgUmF0ZSwgQ2hsb3JvcGh5bGwgPSA1LjUiKQ0KDQojI2tkMiA8LSBkZW5zaXR5KENobEE1LjUkaGVhZGluZy5waVtDaGxBNS41JEZsb3cucmF0ZT09IjAuNiJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQojI2tkMyA8LSBkZW5zaXR5KENobEE1LjUkaGVhZGluZy5waVtDaGxBNS41JEZsb3cucmF0ZT09IjMiXSkNCiMjbGluZXMoa2QzLCBjb2w9J3llbGxvdycsIGx3ZD0yKQ0KDQojI2tkNCA8LSBkZW5zaXR5KENobEE1LjUkaGVhZGluZy5waVtDaGxBNS41JEZsb3cucmF0ZT09IjUuOSJdKQ0KIyNsaW5lcyhrZDQsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCiMja2Q1IDwtIGRlbnNpdHkoQ2hsQTUuNSRoZWFkaW5nLnBpW0NobEE1LjUkRmxvdy5yYXRlPT0iOC45Il0pDQojI2xpbmVzKGtkNSwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiRmxvdyByYXRlICAwIiwgIkZsb3cgcmF0ZSAwLjYiLCAiRmxvdyByYXRlIDMiLCAiRmxvdyByYXRlIDUuOSIsICJGbG93IHJhdGUgOC45IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodCBibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQoNCiMja2QxIDwtIGRlbnNpdHkoQ2hsQTYkaGVhZGluZy5waVtDaGxBNiRGbG93LnJhdGU9PSIwIl0pDQojI3Bsb3Qoa2QxLCB4bGltID0gYyg1LDE3NSksIHlsaW0gPSBjKDAsIDAuMDIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5nIFZzIEZsb3cgUmF0ZSwgQ2hsb3JvcGh5bGwgPSA2IikNCg0Ka2QyIDwtIGRlbnNpdHkoQ2hsQTYkaGVhZGluZy5waVtDaGxBNiRGbG93LnJhdGU9PSIwLjYiXSkNCnBsb3Qoa2QyLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDEyKSwgY29sPSdsaWdodCBibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZyBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gNiIpDQojI2xpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoQ2hsQTYkaGVhZGluZy5waVtDaGxBNiRGbG93LnJhdGU9PSIzIl0pDQojI2xpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShDaGxBNiRoZWFkaW5nLnBpW0NobEE2JEZsb3cucmF0ZT09IjUuOSJdKQ0KIyNsaW5lcyhrZDQsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCiMja2Q1IDwtIGRlbnNpdHkoQ2hsQTYkaGVhZGluZy5waVtDaGxBNiRGbG93LnJhdGU9PSI4LjkiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTckaGVhZGluZy5waVtDaGxBNyRGbG93LnJhdGU9PSIwIl0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAxMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmcgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDciKQ0KDQojI2tkMiA8LSBkZW5zaXR5KENobEE3JGhlYWRpbmcucGlbQ2hsQTckRmxvdy5yYXRlPT0iMC42Il0pDQojI2xpbmVzKGtkMiwgY29sPSdsaWdodCBibHVlJywgbHdkPTIpDQoNCiMja2QzIDwtIGRlbnNpdHkoQ2hsQTckaGVhZGluZy5waVtDaGxBNyRGbG93LnJhdGU9PSIzIl0pDQojI2xpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShDaGxBNyRoZWFkaW5nLnBpW0NobEE3JEZsb3cucmF0ZT09IjUuOSJdKQ0KIyNsaW5lcyhrZDQsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCiMja2Q1IDwtIGRlbnNpdHkoQ2hsQTckaGVhZGluZy5waVtDaGxBNyRGbG93LnJhdGU9PSI4LjkiXSkNCiMjbGluZXMoa2Q1LCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJGbG93IHJhdGUgIDAiLCAiRmxvdyByYXRlIDAuNiIsICJGbG93IHJhdGUgMyIsICJGbG93IHJhdGUgNS45IiwgIkZsb3cgcmF0ZSA4LjkiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgImxpZ2h0IGJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0KIyNrZDEgPC0gZGVuc2l0eShDaGxBMTMkaGVhZGluZy5waVtDaGxBMTMkRmxvdy5yYXRlPT0iMCJdKQ0KIyNwbG90KGtkMSwgeGxpbSA9IGMoNSwxNzUpLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZyBWcyBGbG93IFJhdGUsIENobG9yb3BoeWxsID0gMTMiKQ0KDQprZDIgPC0gZGVuc2l0eShDaGxBMTMkaGVhZGluZy5waVtDaGxBMTMkRmxvdy5yYXRlPT0iMC42Il0pDQpwbG90KGtkMiwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAxMiksIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmcgVnMgRmxvdyBSYXRlLCBDaGxvcm9waHlsbCA9IDEzIikNCiMjbGluZXMoa2QyLCBjb2w9J2xpZ2h0IGJsdWUnLCBsd2Q9MikNCg0KIyNrZDMgPC0gZGVuc2l0eShDaGxBMTMkaGVhZGluZy5waVtDaGxBMTMkRmxvdy5yYXRlPT0iMyJdKQ0KIyNsaW5lcyhrZDMsIGNvbD0neWVsbG93JywgbHdkPTIpDQoNCiMja2Q0IDwtIGRlbnNpdHkoQ2hsQTEzJGhlYWRpbmcucGlbQ2hsQTEzJEZsb3cucmF0ZT09IjUuOSJdKQ0KIyNsaW5lcyhrZDQsIGNvbD0nb3JhbmdlJywgbHdkPTIpDQoNCiMja2Q1IDwtIGRlbnNpdHkoQ2hsQTEzJGhlYWRpbmcucGlbQ2hsQTEzJEZsb3cucmF0ZT09IjguOSJdKQ0KIyNsaW5lcyhrZDUsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkZsb3cgcmF0ZSAgMCIsICJGbG93IHJhdGUgMC42IiwgIkZsb3cgcmF0ZSAzIiwgIkZsb3cgcmF0ZSA1LjkiLCAiRmxvdyByYXRlIDguOSIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHQgYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShDaGxBMTkkaGVhZGluZy5waVtDaGxBMTkkRmxvdy5yYXRlPT0iMCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMTIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5nIFZzIEZsb3cgUmF0ZSwgQ2hsb3JvcGh5bGwgPSAxOSIpDQoNCiMja2QyIDwtIGRlbnNpdHkoQ2hsQTE5JGhlYWRpbmcucGlbQ2hsQTE5JEZsb3cucmF0ZT09IjAuNiJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0nbGlnaHQgYmx1ZScsIGx3ZD0yKQ0KDQojI2tkMyA8LSBkZW5zaXR5KENobEExOSRoZWFkaW5nLnBpW0NobEExOSRGbG93LnJhdGU9PSIzIl0pDQojI2xpbmVzKGtkMywgY29sPSd5ZWxsb3cnLCBsd2Q9MikNCg0KIyNrZDQgPC0gZGVuc2l0eShDaGxBMTkkaGVhZGluZy5waVtDaGxBMTkkRmxvdy5yYXRlPT0iNS45Il0pDQojI2xpbmVzKGtkNCwgY29sPSdvcmFuZ2UnLCBsd2Q9MikNCg0KIyNrZDUgPC0gZGVuc2l0eShDaGxBMTkkaGVhZGluZy5waVtDaGxBMTkkRmxvdy5yYXRlPT0iOC45Il0pDQojI2xpbmVzKGtkNSwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiRmxvdyByYXRlICAwIiwgIkZsb3cgcmF0ZSAwLjYiLCAiRmxvdyByYXRlIDMiLCAiRmxvdyByYXRlIDUuOSIsICJGbG93IHJhdGUgOC45IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJsaWdodCBibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIExpZ2h0ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KcGFyKG1hcj0gYyg0LDQsMiwxKSkNCnBhcihtZnJvdz1jKDMsMykpDQoNCmtkMSA8LSBkZW5zaXR5KENobEEwJGhlYWRpbmcucGlbQ2hsQTAkTGlnaHQ9PSJQcmVzZW50Il0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgTGlnaHQsIENobG9yb3BoeWxsID0gMCIpDQoNCmtkMiA8LSBkZW5zaXR5KENobEEwJGhlYWRpbmcucGlbQ2hsQTAkTGlnaHQ9PSJBYnNlbnQiXSkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTQuMyRoZWFkaW5nLnBpW0NobEE0LjMkTGlnaHQ9PSJQcmVzZW50Il0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgTGlnaHQsIENobG9yb3BoeWxsID0gNC4zIikNCg0KIyNrZDIgPC0gZGVuc2l0eShDaGxBNC4zJGhlYWRpbmcucGlbQ2hsQTQuMyRMaWdodD09IkFic2VudCJdKQ0KIyNsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCmtkMSA8LSBkZW5zaXR5KENobEE0LjYkaGVhZGluZy5waVtDaGxBNC42JExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDQuNiIpDQoNCiMja2QyIDwtIGRlbnNpdHkoQ2hsQTQuNiRoZWFkaW5nLnBpW0NobEE0LjYkTGlnaHQ9PSJBYnNlbnQiXSkNCiMjbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQprZDEgPC0gZGVuc2l0eShDaGxBNS41JGhlYWRpbmcucGlbQ2hsQTUuNSRMaWdodD09IlByZXNlbnQiXSkNCnBsb3Qoa2QxLCB4bGltID0gYygtMTgwLDE4MCksIHlsaW0gPSBjKDAsIDAuMDIpLCBjb2w9J2JsdWUnLCBsd2Q9MiwgbWFpbiA9ICJIZWFkaW5ncyBWcyBMaWdodCwgQ2hsb3JvcGh5bGwgPSA1LjUiKQ0KDQojI2tkMiA8LSBkZW5zaXR5KENobEE1LjUkaGVhZGluZy5waVtDaGxBNS41JExpZ2h0PT0iQWJzZW50Il0pDQojI2xpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCg0KDQprZDEgPC0gZGVuc2l0eShDaGxBNiRoZWFkaW5nLnBpW0NobEE2JExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDYiKQ0KDQojI2tkMiA8LSBkZW5zaXR5KENobEE2JGhlYWRpbmcucGlbQ2hsQTYkTGlnaHQ9PSJBYnNlbnQiXSkNCiMjbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQprZDEgPC0gZGVuc2l0eShDaGxBNyRoZWFkaW5nLnBpW0NobEE3JExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDciKQ0KDQprZDIgPC0gZGVuc2l0eShDaGxBNyRoZWFkaW5nLnBpW0NobEE3JExpZ2h0PT0iQWJzZW50Il0pDQpsaW5lcyhrZDIsIGNvbD0ncmVkJywgbHdkPTIpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBsZWdlbmQgdG8gZGVuc2l0eQ0KICAgICAgIGxlZ2VuZCA9IGMoIkxpZ2h0IFByZXNlbnQiLCAiTGlnaHQgQWJzZW50IiksDQogICAgICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwNCiAgICAgICBsdHkgPSAxKQ0KDQoNCg0Ka2QxIDwtIGRlbnNpdHkoQ2hsQTEzJGhlYWRpbmcucGlbQ2hsQTEzJExpZ2h0PT0iUHJlc2VudCJdKQ0KcGxvdChrZDEsIHhsaW0gPSBjKC0xODAsMTgwKSwgeWxpbSA9IGMoMCwgMC4wMiksIGNvbD0nYmx1ZScsIGx3ZD0yLCBtYWluID0gIkhlYWRpbmdzIFZzIExpZ2h0LCBDaGxvcm9waHlsbCA9IDEzIikNCg0KIyNrZDIgPC0gZGVuc2l0eShDaGxBMTMkaGVhZGluZy5waVtDaGxBMTMkTGlnaHQ9PSJBYnNlbnQiXSkNCiMjbGluZXMoa2QyLCBjb2w9J3JlZCcsIGx3ZD0yKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVnZW5kIHRvIGRlbnNpdHkNCiAgICAgICBsZWdlbmQgPSBjKCJMaWdodCBQcmVzZW50IiwgIkxpZ2h0IEFic2VudCIpLA0KICAgICAgIGNvbCA9IGMoImJsdWUiLCAicmVkIiksDQogICAgICAgbHR5ID0gMSkNCg0KDQprZDEgPC0gZGVuc2l0eShDaGxBMTkkaGVhZGluZy5waVtDaGxBMTkkTGlnaHQ9PSJQcmVzZW50Il0pDQpwbG90KGtkMSwgeGxpbSA9IGMoLTE4MCwxODApLCB5bGltID0gYygwLCAwLjAyKSwgY29sPSdibHVlJywgbHdkPTIsIG1haW4gPSAiSGVhZGluZ3MgVnMgTGlnaHQsIENobG9yb3BoeWxsID0gMTkiKQ0KDQprZDIgPC0gZGVuc2l0eShDaGxBMTkkaGVhZGluZy5waVtDaGxBMTkkTGlnaHQ9PSJBYnNlbnQiXSkNCmxpbmVzKGtkMiwgY29sPSdyZWQnLCBsd2Q9MikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGxlZ2VuZCB0byBkZW5zaXR5DQogICAgICAgbGVnZW5kID0gYygiTGlnaHQgUHJlc2VudCIsICJMaWdodCBBYnNlbnQiKSwNCiAgICAgICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLA0KICAgICAgIGx0eSA9IDEpDQoNCmBgYA0KDQo=